[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/Requests/Cookie/ -> Jar.php (source)

   1  <?php
   2  /**
   3   * Cookie holder object
   4   *
   5   * @package Requests
   6   * @subpackage Cookies
   7   */
   8  
   9  /**
  10   * Cookie holder object
  11   *
  12   * @package Requests
  13   * @subpackage Cookies
  14   */
  15  class Requests_Cookie_Jar implements ArrayAccess, IteratorAggregate {
  16      /**
  17       * Actual item data
  18       *
  19       * @var array
  20       */
  21      protected $cookies = array();
  22  
  23      /**
  24       * Create a new jar
  25       *
  26       * @param array $cookies Existing cookie values
  27       */
  28  	public function __construct($cookies = array()) {
  29          $this->cookies = $cookies;
  30      }
  31  
  32      /**
  33       * Normalise cookie data into a Requests_Cookie
  34       *
  35       * @param string|Requests_Cookie $cookie
  36       * @return Requests_Cookie
  37       */
  38  	public function normalize_cookie($cookie, $key = null) {
  39          if ($cookie instanceof Requests_Cookie) {
  40              return $cookie;
  41          }
  42  
  43          return Requests_Cookie::parse($cookie, $key);
  44      }
  45  
  46      /**
  47       * Normalise cookie data into a Requests_Cookie
  48       *
  49       * @codeCoverageIgnore
  50       * @deprecated Use {@see Requests_Cookie_Jar::normalize_cookie}
  51       * @return Requests_Cookie
  52       */
  53  	public function normalizeCookie($cookie, $key = null) {
  54          return $this->normalize_cookie($cookie, $key);
  55      }
  56  
  57      /**
  58       * Check if the given item exists
  59       *
  60       * @param string $key Item key
  61       * @return boolean Does the item exist?
  62       */
  63  	public function offsetExists($key) {
  64          return isset($this->cookies[$key]);
  65      }
  66  
  67      /**
  68       * Get the value for the item
  69       *
  70       * @param string $key Item key
  71       * @return string|null Item value (null if offsetExists is false)
  72       */
  73  	public function offsetGet($key) {
  74          if (!isset($this->cookies[$key])) {
  75              return null;
  76          }
  77  
  78          return $this->cookies[$key];
  79      }
  80  
  81      /**
  82       * Set the given item
  83       *
  84       * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
  85       *
  86       * @param string $key Item name
  87       * @param string $value Item value
  88       */
  89  	public function offsetSet($key, $value) {
  90          if ($key === null) {
  91              throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
  92          }
  93  
  94          $this->cookies[$key] = $value;
  95      }
  96  
  97      /**
  98       * Unset the given header
  99       *
 100       * @param string $key
 101       */
 102  	public function offsetUnset($key) {
 103          unset($this->cookies[$key]);
 104      }
 105  
 106      /**
 107       * Get an iterator for the data
 108       *
 109       * @return ArrayIterator
 110       */
 111  	public function getIterator() {
 112          return new ArrayIterator($this->cookies);
 113      }
 114  
 115      /**
 116       * Register the cookie handler with the request's hooking system
 117       *
 118       * @param Requests_Hooker $hooks Hooking system
 119       */
 120  	public function register(Requests_Hooker $hooks) {
 121          $hooks->register('requests.before_request', array($this, 'before_request'));
 122          $hooks->register('requests.before_redirect_check', array($this, 'before_redirect_check'));
 123      }
 124  
 125      /**
 126       * Add Cookie header to a request if we have any
 127       *
 128       * As per RFC 6265, cookies are separated by '; '
 129       *
 130       * @param string $url
 131       * @param array $headers
 132       * @param array $data
 133       * @param string $type
 134       * @param array $options
 135       */
 136  	public function before_request($url, &$headers, &$data, &$type, &$options) {
 137          if (!$url instanceof Requests_IRI) {
 138              $url = new Requests_IRI($url);
 139          }
 140  
 141          if (!empty($this->cookies)) {
 142              $cookies = array();
 143              foreach ($this->cookies as $key => $cookie) {
 144                  $cookie = $this->normalize_cookie($cookie, $key);
 145  
 146                  // Skip expired cookies
 147                  if ($cookie->is_expired()) {
 148                      continue;
 149                  }
 150  
 151                  if ($cookie->domain_matches($url->host)) {
 152                      $cookies[] = $cookie->format_for_header();
 153                  }
 154              }
 155  
 156              $headers['Cookie'] = implode('; ', $cookies);
 157          }
 158      }
 159  
 160      /**
 161       * Parse all cookies from a response and attach them to the response
 162       *
 163       * @var Requests_Response $response
 164       */
 165  	public function before_redirect_check(Requests_Response $return) {
 166          $url = $return->url;
 167          if (!$url instanceof Requests_IRI) {
 168              $url = new Requests_IRI($url);
 169          }
 170  
 171          $cookies         = Requests_Cookie::parse_from_headers($return->headers, $url);
 172          $this->cookies   = array_merge($this->cookies, $cookies);
 173          $return->cookies = $this;
 174      }
 175  }


Generated : Thu Dec 15 08:20:01 2022 Cross-referenced by PHPXref