欢迎光临
我们一直在努力

php cookie(专题)

本专题通过图文、视频的形式全面介绍了php cookie的由来,php cookie属性有哪些,php cookie函数用法以及php cookie实际应用实例,通俗易懂!欢迎php中文网的同学们学习!

一:什么是 Cookie ?

cookie 常用于识别用户。

cookie 是一种服务器留在用户计算机上的小文件。

每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。

通过 PHP,您能够创建并取回 cookie 的值。

相关专题推荐:php session

二: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 — 发送 Cookie

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。

和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。

请在产生任何输出之前(包括 <html> 和 <head> 或者空格)调用本函数。

一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。

Cookie 值同样也存在于 $_REQUEST。

参数

参数 描述
name Cookie 名称。
value

Cookie 值。 这个值储存于用户的电脑里,请勿储存敏感信息。

expire

Cookie 的过期时间。

这是个 Unix 时间戳,即 Unix 纪元以来的秒数。

也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。

path

Cookie 有效的服务器路径。

设置成 '/' 时,Cookie 对整个域名 domain 有效。

如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效。

默认值是设置 Cookie 时的当前目录。

domain

Cookie 的有效域名/子域名。

设置成子域名,会使 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 编码的 cookie

setrawcookie ( 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('登录成功!'); }  ?>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <form action="" method="post">     <table width="300" border="1" align="center" cellpadding="5" cellspacing="5">         <thead>         <tr>             <td colspan="2" align="center"><b>登录</b></td>         </tr>         </thead>         <tr align="center">             <td>用 户 名</td>             <td><input type="text" name="username" value="<?=cookie_get_username()?>"></td>         </tr>         <tr align="center">             <td>密码</td>             <td><input type="password" name="password" value="<?=cookie_get_password()?>"></td>         </tr>         <tr align="center">             <td>记住账号</td>             <td>                 <input type="checkbox" name="remember" value="1" <?=cookie_get_remember()?>>             </td>         </tr>         <tr align="center">             <td colspan="2"><input type="submit" name="Submit" value="提交" /></td>         </tr>     </table> </form>

六:php cookie 精选技术文章

待添加

七:php cookie 相关视频教程

待添加

  • 微信
  • 分享
  • 相关标签:cookie
  • 本文原创发布php中文网,转载请注明出处,感谢您的尊重!
    • 上一篇:2020年ajax面试题及答案(最新)
    • 下一篇:没有了
    赞(0)
    【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。