dokuwiki-matrixnotifierwas-plugin – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | <?php |
2 | |||
3 | namespace GuzzleHttp\Cookie; |
||
4 | |||
5 | /** |
||
6 | * Persists cookies in the client session |
||
7 | */ |
||
8 | class SessionCookieJar extends CookieJar |
||
9 | { |
||
10 | /** |
||
11 | * @var string session key |
||
12 | */ |
||
13 | private $sessionKey; |
||
14 | |||
15 | /** |
||
16 | * @var bool Control whether to persist session cookies or not. |
||
17 | */ |
||
18 | private $storeSessionCookies; |
||
19 | |||
20 | /** |
||
21 | * Create a new SessionCookieJar object |
||
22 | * |
||
23 | * @param string $sessionKey Session key name to store the cookie |
||
24 | * data in session |
||
25 | * @param bool $storeSessionCookies Set to true to store session cookies |
||
26 | * in the cookie jar. |
||
27 | */ |
||
28 | public function __construct(string $sessionKey, bool $storeSessionCookies = false) |
||
29 | { |
||
30 | parent::__construct(); |
||
31 | $this->sessionKey = $sessionKey; |
||
32 | $this->storeSessionCookies = $storeSessionCookies; |
||
33 | $this->load(); |
||
34 | } |
||
35 | |||
36 | /** |
||
37 | * Saves cookies to session when shutting down |
||
38 | */ |
||
39 | public function __destruct() |
||
40 | { |
||
41 | $this->save(); |
||
42 | } |
||
43 | |||
44 | /** |
||
45 | * Save cookies to the client session |
||
46 | */ |
||
47 | public function save(): void |
||
48 | { |
||
49 | $json = []; |
||
50 | /** @var SetCookie $cookie */ |
||
51 | foreach ($this as $cookie) { |
||
52 | if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { |
||
53 | $json[] = $cookie->toArray(); |
||
54 | } |
||
55 | } |
||
56 | |||
57 | $_SESSION[$this->sessionKey] = \json_encode($json); |
||
58 | } |
||
59 | |||
60 | /** |
||
61 | * Load the contents of the client session into the data array |
||
62 | */ |
||
63 | protected function load(): void |
||
64 | { |
||
65 | if (!isset($_SESSION[$this->sessionKey])) { |
||
66 | return; |
||
67 | } |
||
68 | $data = \json_decode($_SESSION[$this->sessionKey], true); |
||
69 | if (\is_array($data)) { |
||
70 | foreach ($data as $cookie) { |
||
71 | $this->setCookie(new SetCookie($cookie)); |
||
72 | } |
||
73 | } elseif (\strlen($data)) { |
||
74 | throw new \RuntimeException('Invalid cookie data'); |
||
75 | } |
||
76 | } |
||
77 | } |