本专题通过图文、视频的形式全面介绍了php cookie的由来,php cookie属性有哪些,php cookie函数用法以及php cookie实际应用实例,通俗易懂!欢迎php中文网的同学们学习!
一:什么是 Cookie ?
cookie 常用于识别用户。
cookie 是一种服务器留在用户计算机上的小文件。
每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。
通过 PHP,您能够创建并取回 cookie 的值。
二:Cookie 的诞生
由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的。
Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。
比如判断用户是否是第一次访问网站。目前最新的规范是RFC 6265,它是一个由浏览器服务器共同协作实现的规范。
三:Cookie 的原理
第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中,在浏览器第二次发请求的时候,会把cookie带过去,服务端会辨别用户身份,当然服务器也可以修改cookie内容。
四:Cookie 属性
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
Name表示 Cookie 的名称。
Value表示 Cookie 的值。
Domain指定了可以访问该 Cookie 的 Web 站点或域。
Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。
Path定义了Web站点上可以访问该Cookie的目录。
Expires什么是有效期,就是图中的Expires属性,一般浏览器的cookie都是默认储存的,当关闭浏览器结束这个会话的时候,这个cookie也就会被删除。
Secure指定是否使用HTTPS安全协议发送Cookie。
使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。
HttpOnly用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。
五:PHP Cookie 函数
1、setcookie — 发送 Cookiesetcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。
和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。
请在产生任何输出之前(包括 和
或者空格)调用本函数。一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。
Cookie 值同样也存在于 $_REQUEST。
参数参数描述
nameCookie 名称。
valueCookie 值。 这个值储存于用户的电脑里,请勿储存敏感信息。
expireCookie 的过期时间。
这是个 Unix 时间戳,即 Unix 纪元以来的秒数。
也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。
pathCookie 有效的服务器路径。
设置成 '/' 时,Cookie 对整个域名 domain 有效。
如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效。
默认值是设置 Cookie 时的当前目录。
domainCookie 的有效域名/子域名。
设置成子域名,会使 Cookie 对这个子域名和它的三级域名有效。
要让 Cookie 对整个域名有效,只要设置成域名就可以了。
secure设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。
设置成 TRUE 时,只有安全连接存在时才会设置 Cookie。
如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie 。
httponly设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。
这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。
要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置,不过这个说法经常有争议。
返回值
如果在调用本函数以前就产生了输出,setcookie() 会调用失败并返回 FALSE。
如果 setcookie() 成功运行,返回 TRUE。
示例<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); /* 1 小时过期 */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", 1);
?>
2、setrawcookie — 发送未经 URL 编码的 cookiesetrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool
setrawcookie() 和 setcookie() 非常相似,唯一不同之处是发送到浏览器的 cookie 值没有自动经过 URL 编码(urlencode)。
六:PHP Cookie 简单示例
1、基本操作<?php
//添加Cookie
setcookie('username', 'phpcn', time() + 3600);
//获取Cookie
$username = $_COOKIE['username'];
//删除Cookie
setcookie('username', '', time() - 3600);
//修改Cookie
setcookie('username', 'phpcn-updated', time() + 3600);
?>
2、面向过程封装<?php
/**
* 获取 Cookie
* @param string $name Cookie 名称
* @return mixed Cookie 值
*/
function cookie_get($name)
{
return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}
/**
* 删除 Cookie
* @param string $name Cookie 名称
*/
function cookie_del($name)
{
setcookie($name, '', time() - 3600);
}
/**
* 设置Cookie
* @param string $name Cookie 名称
* @param mixed $value Cookie 值
* @param integer $expire Cookie 过期时间
* @param string $path Cookie 有效路径
* @param string $domian Cookie 有效域名/子域名
*/
function cookie_set($name, $value, $expire = 3600, $path = '/', $domian = '')
{
setcookie($name, $value, time() + $expire);
}
/**
* 检测 Cookie
* @param string $name Cookie 名称
* @param boolean $has_empty 检测为空
* @return boolean
*/
function cookie_has($name)
{
return isset($_COOKIE[$name]);
}
?>
3、面向对象封装<?php
class Cookie
{
const OPTION_EXPIRE = 'expire';
const OPTION_PATH = 'path';
const OPTION_DOMAIN = 'domain';
const OPTION_SECURE = 'secure';
const OPTION_HTTPONLY = 'httponly';
/**
* Cookie 实例
* @var null
*/
private static $instance = null;
/**
* Cookie 选项
* @var array
*/
private $options = [
self::OPTION_EXPIRE => 3600,
self::OPTION_PATH => '/',
self::OPTION_DOMAIN => 'domain',
self::OPTION_SECURE => false,
self::OPTION_HTTPONLY => false
];
/**
* Cookie constructor.
* @param $options
*/
private function __construct($options)
{
$this->setOptions($options);
}
/**
* privated __clone
*/
private function __clone()
{
}
/**
* 获取实例
* @param $options
* @return Cookie|null
*/
public static function getInstance($options)
{
if (is_null(self::$instance)) {
self::$instance = new self($options);
}
return self::$instance;
}
/**
* 设置选项
* @param $name
* @param $value
*/
public function setOption($name, $value)
{
if (isset($this->options[$name])) {
$this->options[$name] = $value;
}
throw new InvalidArgumentException('Cookie option not exists:{$name}');
}
/**
* 设置多个选项
* @param $options
*/
public function setOptions($options)
{
foreach ($options as $name => $value) {
$this->setOption($name, $value);
}
}
/**
* 设置 Cookie
* @param $name
* @param $value
* @param array $options
*/
public function set($name, $value, $options = [])
{
$this->setOptions($options);
if (is_array($value) || is_object($value)) {
$value = json_encode($value);
}
setcookie(
$name,
$value,
$this->options[self::OPTION_EXPIRE],
$this->options[self::OPTION_PATH],
$this->options[self::OPTION_DOMAIN],
$this->options[self::OPTION_SECURE],
$this->options[self::OPTION_HTTPONLY]
);
}
/**
* 获取 Cookie
* @param $name
* @return array|mixed
*/
public function get($name)
{
$value = $_COOKIE[$name];
if (is_array($value)) {
$arr=[];
foreach ($value as $k => $v) {
$arr[$k] = substr($v, 0,1) == '{' ? json_decode($value) : $v;
}
return $arr;
} else {
return substr($value, 0,1) == '{' ? json_decode($value) : $value;
}
}
/**
* 删除 Cookie
* @param $name
* @param array $options
*/
public function del($name, $options = [])
{
$this->setOptions($options);
$value = $_COOKIE[$name];
if ($value) {
if (is_array($value)) {
foreach ($value as $k => $v) {
setcookie(
$name . '[' . $k . ']',
'',
time() - 3600,
$this->options[self::OPTION_EXPIRE],
$this->options[self::OPTION_PATH],
$this->options[self::OPTION_DOMAIN],
$this->options[self::OPTION_SECURE],
$this->options[self::OPTION_HTTPONLY]
);
unset($v);
}
}else{
setcookie(
$name,
'',
time() - 3600,
$this->options[self::OPTION_EXPIRE],
$this->options[self::OPTION_PATH],
$this->options[self::OPTION_DOMAIN],
$this->options[self::OPTION_SECURE],
$this->options[self::OPTION_HTTPONLY]
);
unset($value);
}
}
}
}
4、记住登录账号示例<?php
function cookie_get_username()
{
return isset($_COOKIE['username']) ? $_COOKIE['username'] : null;
}
function cookie_get_password()
{
return isset($_COOKIE['username']) ? $_COOKIE['username'] : null;
}
function cookie_get_remember()
{
return isset($_COOKIE['remember']) ? 'checked' : null;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
if (isset($_POST['remember']) && $_POST['remember'] === '1') {
setcookie('username', $username, time() + 3600);
setcookie('password', $password, time() + 3600);
setcookie('remember', '1', time() + 3600);
} else {
setcookie('username', '', time() - 3600);
setcookie('password', '', time() - 3600);
setcookie('remember', '', time() - 3600);
}
die('登录成功!');
}
?>
登录
用 户 名密码记住账号>
六:php cookie 精选技术文章
七:php cookie 相关视频教程
本文原创发布php中文网,转载请注明出处,感谢您的尊重!