⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookie.php

📁 Bug tracker, and reporter.
💻 PHP
字号:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to version 1.0 of the Zend Framework * license, that is bundled with this package in the file LICENSE.txt, * and is available through the world-wide-web at the following URL: * http://framework.zend.com/license/new-bsd. If you did not * receive a copy of the Zend Framework license and are unable to * obtain it through the world-wide-web, please send a note to * license@zend.com so we can mail you a copy immediately. * * @category   Zend * @package    Zend_Http * @subpackage Cookie * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com/) * @version    $Id: Cookie.php 8064 2008-02-16 10:58:39Z thomas $ * @license    http://framework.zend.com/license/new-bsd     New BSD License */require_once 'Zend/Uri/Http.php';/** * Zend_Http_Cookie is a class describing an HTTP cookie and all it's parameters. * * Zend_Http_Cookie is a class describing an HTTP cookie and all it's parameters. The * class also enables validating whether the cookie should be sent to the server in * a specified scenario according to the request URI, the expiry time and whether * session cookies should be used or not. Generally speaking cookies should be * contained in a Cookiejar object, or instantiated manually and added to an HTTP * request. * * See http://wp.netscape.com/newsref/std/cookie_spec.html for some specs. * * @category    Zend * @package     Zend_Http * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com/) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Http_Cookie{    /**     * Cookie name     *     * @var string     */    protected $name;    /**     * Cookie value     *     * @var string     */    protected $value;    /**     * Cookie expiry date     *     * @var int     */    protected $expires;    /**     * Cookie domain     *     * @var string     */    protected $domain;    /**     * Cookie path     *     * @var string     */    protected $path;    /**     * Whether the cookie is secure or not     *     * @var boolean     */    protected $secure;    /**     * Cookie object constructor     *     * @todo Add validation of each one of the parameters (legal domain, etc.)     *     * @param string $name     * @param string $value     * @param int $expires     * @param string $domain     * @param string $path     * @param bool $secure     */    public function __construct($name, $value, $domain, $expires = null, $path = null, $secure = false)    {        if (preg_match("/[=,; \t\r\n\013\014]/", $name)) {            require_once 'Zend/Http/Exception.php';            throw new Zend_Http_Exception("Cookie name cannot contain these characters: =,; \\t\\r\\n\\013\\014 ({$name})");        }        if (! $this->name = (string) $name) {            require_once 'Zend/Http/Exception.php';            throw new Zend_Http_Exception('Cookies must have a name');        }        if (! $this->domain = (string) $domain) {            require_once 'Zend/Http/Exception.php';            throw new Zend_Http_Exception('Cookies must have a domain');        }        $this->value = (string) $value;        $this->expires = ($expires === null ? null : (int) $expires);        $this->path = ($path ? $path : '/');        $this->secure = $secure;    }    /**     * Get Cookie name     *     * @return string     */    public function getName()    {        return $this->name;    }    /**     * Get cookie value     *     * @return string     */    public function getValue()    {        return $this->value;    }    /**     * Get cookie domain     *     * @return string     */    public function getDomain()    {        return $this->domain;    }    /**     * Get the cookie path     *     * @return string     */    public function getPath()    {        return $this->path;    }    /**     * Get the expiry time of the cookie, or null if no expiry time is set     *     * @return int|null     */    public function getExpiryTime()    {        return $this->expires;    }    /**     * Check whether the cookie should only be sent over secure connections     *     * @return boolean     */    public function isSecure()    {        return $this->secure;    }    /**     * Check whether the cookie has expired     *     * Always returns false if the cookie is a session cookie (has no expiry time)     *     * @param int $now Timestamp to consider as "now"     * @return boolean     */    public function isExpired($now = null)    {        if ($now === null) $now = time();        if (is_int($this->expires) && $this->expires < $now) {            return true;        } else {            return false;        }    }    /**     * Check whether the cookie is a session cookie (has no expiry time set)     *     * @return boolean     */    public function isSessionCookie()    {        return ($this->expires === null);    }    /**     * Checks whether the cookie should be sent or not in a specific scenario     *     * @param string|Zend_Uri_Http $uri URI to check against (secure, domain, path)     * @param boolean $matchSessionCookies Whether to send session cookies     * @param int $now Override the current time when checking for expiry time     * @return boolean     */    public function match($uri, $matchSessionCookies = true, $now = null)    {        if (is_string ($uri)) {            $uri = Zend_Uri_Http::factory($uri);        }        // Make sure we have a valid Zend_Uri_Http object        if (! ($uri->valid() && ($uri->getScheme() == 'http' || $uri->getScheme() =='https'))) {            require_once 'Zend/Http/Exception.php';                throw new Zend_Http_Exception('Passed URI is not a valid HTTP or HTTPS URI');        }        // Check that the cookie is secure (if required) and not expired        if ($this->secure && $uri->getScheme() != 'https') return false;        if ($this->isExpired($now)) return false;        if ($this->isSessionCookie() && ! $matchSessionCookies) return false;        // Validate domain and path        // Domain is validated using tail match, while path is validated using head match        $domain_preg = preg_quote($this->getDomain(), "/");        if (! preg_match("/{$domain_preg}$/", $uri->getHost())) return false;        $path_preg = preg_quote($this->getPath(), "/");        if (! preg_match("/^{$path_preg}/", $uri->getPath())) return false;        // If we didn't die until now, return true.        return true;    }    /**     * Get the cookie as a string, suitable for sending as a "Cookie" header in an     * HTTP request     *     * @return string     */    public function __toString()    {        return $this->name . '=' . urlencode($this->value) . ';';    }    /**     * Generate a new Cookie object from a cookie string     * (for example the value of the Set-Cookie HTTP header)     *     * @param string $cookieStr     * @param Zend_Uri_Http|string $ref_uri Reference URI for default values (domain, path)     * @return Zend_Http_Cookie A new Zend_Http_Cookie object or false on failure.     */    public static function fromString($cookieStr, $ref_uri = null)    {        // Set default values        if (is_string($ref_uri)) {            $ref_uri = Zend_Uri_Http::factory($ref_uri);        }        $name    = '';        $value   = '';        $domain  = '';        $path    = '';        $expires = null;        $secure  = false;        $parts   = explode(';', $cookieStr);        // If first part does not include '=', fail        if (strpos($parts[0], '=') === false) return false;        // Get the name and value of the cookie        list($name, $value) = explode('=', trim(array_shift($parts)), 2);        $name  = trim($name);        $value = urldecode(trim($value));        // Set default domain and path        if ($ref_uri instanceof Zend_Uri_Http) {            $domain = $ref_uri->getHost();            $path = $ref_uri->getPath();            $path = substr($path, 0, strrpos($path, '/'));        }        // Set other cookie parameters        foreach ($parts as $part) {            $part = trim($part);            if (strtolower($part) == 'secure') {                $secure = true;                continue;            }            $keyValue = explode('=', $part, 2);            if (count($keyValue) == 2) {                list($k, $v) = $keyValue;                switch (strtolower($k))    {                    case 'expires':                        $expires = strtotime($v);                        break;                    case 'path':                        $path = $v;                        break;                    case 'domain':                        $domain = $v;                        break;                    default:                        break;                }            }        }        if ($name !== '') {            return new Zend_Http_Cookie($name, $value, $domain, $expires, $path, $secure);        } else {            return false;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -