php_会话技术— cookie

  我们访问网站走的是HTTP协议,协议具有无连接无状态的特性,对事物的处理不具有记忆能力,即每次请求不会记录用户的访问行为。

   我们在web项目中,很多时候需要将会话数据持久化记忆存储,以便后续的程序能够随时调用和使用,比如用户的登录等。

  浏览器多次请求同一台服务器时,将数据持久化存储的一种技术,就是会话技术。

  会话技术的分类有COOKIE和SESSION。

  cookie:允许服务器将数据持久化存储在浏览器端的一种技术

  php_会话技术— cookie

  分析原理图说明:
  1)浏览器要允许服务器将数据储存到浏览器端;
  2)如果浏览器已经存储了某台服务器的COOKIE数据,那么在接下来的请求中,都将携带上这些数据去请求服务器

  cookie操作

  COOKIE数据本质上也是数据,基本的操作也是增删改查。

  添加:setcookie()。

  我们可以在浏览器COOKIE会话数据区查看到cookie信息。

  php_会话技术— cookie

  修改cookie:名不变,值改变。

  php_会话技术— cookie

  删除COOKIE数据

  php_会话技术— cookie

  COOKIE数据的获取(查询)

  php_会话技术— cookie

  COOKIE数据区和$_COOKIE数组变量之间的关系:

  (看不清图片可将网页放大,或将图片另存到本地查看)

  php_会话技术— cookie

  通过分析原理图:
  1)COOKIE数据区是在浏览器端;
  2)$_COOKIE变量会在请求之后程序执行之初初始化一次;
  3)Setcookie时并没有直接去操作$_COOKIE变量,而是在响应时告诉浏览器接下来要去保存一条COOKIE数据到浏览器端的会话数据区。

  COOKIE数据的属性设置
  Setcookie(名,值,有效期,有效路径,有效域,是否安全传输,HTTPONLY)
  有效期:通过第三个参数设置有效期。
  当我们给0值或者不给值的时候表示默认的有效期。
  默认的有效期为一个会话周期:从访问到浏览器关闭。

  php_会话技术— cookie 

  特殊用法:我们可以通过设置过期的时间来删除一个COOKIE数据

setcookie('age','45',time()-1);

  有效路径:通过第四个参数设置。
  不设置或者设置为空字符串为默认情况。
  默认情况是在当前目录及当前目录的子目录下有效。

  php_会话技术— cookie

  有效域:通过第五个参数设置。
  不设置或者设置为空字符串为默认情况。
  默认情况表示当前域名下有效。

  php_会话技术— cookie

  是否安全传输:通过第六个参数设置。
  不设置或者设置为false表示默认情况。
  默认情况是http和https下都能获取到COOKIE数据。

setcookie('age','45',0,'','',false);

  HTTPONLY:通过设置第七个参数来设置。

   不设置或者设置为false为默认情况。

  默认情况COOKIE数据还能被其他脚本语言所获取。

  测试通过js获得COOKIE数据:

   php_会话技术— cookie

  我们通过第七个参数来设置,禁止获取:

  php_会话技术— cookie

  

  COOKIE技术的局限

  1)数据存储在浏览器端,安全性低。

   2)如果有海量的会话数据,浏览器每次请求都会携带上这些COOKIE数据,将大量占用带宽。

  我们可以通过SESSION技术解决上述局限。

  附:php_会话技术 — session