Open Journal Systems  3.3.0
php-http/message/src/CookieJar.php
1 <?php
2 
3 namespace Http\Message;
4 
10 final class CookieJar implements \Countable, \IteratorAggregate
11 {
15  protected $cookies;
16 
17  public function __construct()
18  {
19  $this->cookies = new \SplObjectStorage();
20  }
21 
29  public function hasCookie(Cookie $cookie)
30  {
31  return $this->cookies->contains($cookie);
32  }
33 
39  public function addCookie(Cookie $cookie)
40  {
41  if (!$this->hasCookie($cookie)) {
42  $cookies = $this->getMatchingCookies($cookie);
43 
44  foreach ($cookies as $matchingCookie) {
45  if ($cookie->getValue() !== $matchingCookie->getValue() || $cookie->getMaxAge() > $matchingCookie->getMaxAge()) {
46  $this->removeCookie($matchingCookie);
47 
48  continue;
49  }
50  }
51 
52  if ($cookie->hasValue()) {
53  $this->cookies->attach($cookie);
54  }
55  }
56  }
57 
63  public function removeCookie(Cookie $cookie)
64  {
65  $this->cookies->detach($cookie);
66  }
67 
73  public function getCookies()
74  {
75  $match = function ($matchCookie) {
76  return true;
77  };
78 
79  return $this->findMatchingCookies($match);
80  }
81 
89  public function getMatchingCookies(Cookie $cookie)
90  {
91  $match = function ($matchCookie) use ($cookie) {
92  return $matchCookie->match($cookie);
93  };
94 
95  return $this->findMatchingCookies($match);
96  }
97 
105  protected function findMatchingCookies(callable $match)
106  {
107  $cookies = [];
108 
109  foreach ($this->cookies as $cookie) {
110  if ($match($cookie)) {
111  $cookies[] = $cookie;
112  }
113  }
114 
115  return $cookies;
116  }
117 
123  public function hasCookies()
124  {
125  return $this->cookies->count() > 0;
126  }
127 
133  public function setCookies(array $cookies)
134  {
135  $this->clear();
136  $this->addCookies($cookies);
137  }
138 
144  public function addCookies(array $cookies)
145  {
146  foreach ($cookies as $cookie) {
147  $this->addCookie($cookie);
148  }
149  }
150 
156  public function removeCookies(array $cookies)
157  {
158  foreach ($cookies as $cookie) {
159  $this->removeCookie($cookie);
160  }
161  }
162 
172  public function removeMatchingCookies($name = null, $domain = null, $path = null)
173  {
174  $match = function ($cookie) use ($name, $domain, $path) {
175  $match = true;
176 
177  if (isset($name)) {
178  $match = $match && ($cookie->getName() === $name);
179  }
180 
181  if (isset($domain)) {
182  $match = $match && $cookie->matchDomain($domain);
183  }
184 
185  if (isset($path)) {
186  $match = $match && $cookie->matchPath($path);
187  }
188 
189  return $match;
190  };
191 
192  $cookies = $this->findMatchingCookies($match);
193 
194  $this->removeCookies($cookies);
195  }
196 
200  public function clear()
201  {
202  $this->cookies = new \SplObjectStorage();
203  }
204 
208  public function count()
209  {
210  return $this->cookies->count();
211  }
212 
216  public function getIterator()
217  {
218  return clone $this->cookies;
219  }
220 }
Http\Message\CookieJar\removeMatchingCookies
removeMatchingCookies($name=null, $domain=null, $path=null)
Definition: php-http/message/src/CookieJar.php:175
Http\Message\CookieJar\$cookies
$cookies
Definition: php-http/message/src/CookieJar.php:18
Http\Message\CookieJar\hasCookies
hasCookies()
Definition: php-http/message/src/CookieJar.php:126
Http\Message\CookieJar\getMatchingCookies
getMatchingCookies(Cookie $cookie)
Definition: php-http/message/src/CookieJar.php:92
Http\Message\CookieJar\addCookies
addCookies(array $cookies)
Definition: php-http/message/src/CookieJar.php:147
Http\Message\CookieJar\removeCookie
removeCookie(Cookie $cookie)
Definition: php-http/message/src/CookieJar.php:66
Http\Message\CookieJar\addCookie
addCookie(Cookie $cookie)
Definition: php-http/message/src/CookieJar.php:42
Http\Message\Cookie
Definition: vendor/php-http/message/src/Cookie.php:12
Http\Message\CookieJar\getIterator
getIterator()
Definition: php-http/message/src/CookieJar.php:219
Http\Message\Cookie\getValue
getValue()
Definition: vendor/php-http/message/src/Cookie.php:161
Http\Message\Cookie\hasValue
hasValue()
Definition: vendor/php-http/message/src/Cookie.php:171
Http\Message\CookieJar\getCookies
getCookies()
Definition: php-http/message/src/CookieJar.php:76
Http\Message\CookieJar\count
count()
Definition: php-http/message/src/CookieJar.php:211
Http\Message
Http\Message\CookieJar\clear
clear()
Definition: php-http/message/src/CookieJar.php:203
Http\Message\CookieJar\removeCookies
removeCookies(array $cookies)
Definition: php-http/message/src/CookieJar.php:159
Http\Message\CookieJar\setCookies
setCookies(array $cookies)
Definition: php-http/message/src/CookieJar.php:136
Http\Message\CookieJar\__construct
__construct()
Definition: php-http/message/src/CookieJar.php:20
Http\Message\CookieJar\hasCookie
hasCookie(Cookie $cookie)
Definition: php-http/message/src/CookieJar.php:32
Http\Message\CookieJar
Definition: php-http/message/src/CookieJar.php:10
Http\Message\CookieJar\findMatchingCookies
findMatchingCookies(callable $match)
Definition: php-http/message/src/CookieJar.php:108
Http\Message\Cookie\getMaxAge
getMaxAge()
Definition: vendor/php-http/message/src/Cookie.php:198