/** * Parse all Set-Cookie headers from request headers * * @param Requests_Response_Headers $headers * @return array */ public static function parseFromHeaders(Requests_Response_Headers $headers, Requests_IRI $origin = null) { $cookie_headers = $headers->getValues('Set-Cookie'); if (empty($cookie_headers)) { return array(); } $cookies = array(); foreach ($cookie_headers as $header) { $parsed = self::parse($header); // Default domain/path attributes if (empty($parsed->attributes['domain']) && !empty($origin)) { $parsed->attributes['domain'] = $origin->host; $parsed->flags['host-only'] = false; } else { $parsed->flags['host-only'] = true; } $path_is_valid = !empty($parsed->attributes['path']) && $parsed->attributes['path'][0] === '/'; if (!$path_is_valid && !empty($origin)) { $path = $origin->path; // Default path normalization as per RFC 6265 section 5.1.4 if (substr($path, 0, 1) !== '/') { // If the uri-path is empty or if the first character of // the uri-path is not a %x2F ("/") character, output // %x2F ("/") and skip the remaining steps. $path = '/'; } elseif (substr_count($path, '/') === 1) { // If the uri-path contains no more than one %x2F ("/") // character, output %x2F ("/") and skip the remaining // step. $path = '/'; } else { // Output the characters of the uri-path from the first // character up to, but not including, the right-most // %x2F ("/"). $path = substr($path, 0, strrpos($path, '/')); } $parsed->attributes['path'] = $path; } // Reject invalid cookie domains if (!$parsed->domainMatches($origin->host)) { continue; } $cookies[$parsed->name] = $parsed; } return $cookies; }
/** * Parse all Set-Cookie headers from request headers * * @param Requests_Response_Headers $headers * @return array */ public static function parseFromHeaders(Requests_Response_Headers $headers) { $cookie_headers = $headers->getValues('Set-Cookie'); if (empty($cookie_headers)) { return array(); } $cookies = array(); foreach ($cookie_headers as $header) { $parsed = self::parse($header); $cookies[$parsed->name] = $parsed; } return $cookies; }