[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Dec 15 01:00:02 2022 | Cross-referenced by PHPXref 0.7.1 |