9、PHP 基础教程 - cookie 和 session

2019-07-03

创建 cookie

cookie 必须在发送其他任何信息之前从服务器发送到客户端,如果使用缓冲可在任何位置

setcookie 函数发送 cookie 用法:

setcookie(name,value);

读取 cookie

函数 setcookie 将 cookie 数据存放在数组 $_COOKIE 中

$_COOKIE['name']

添加 cookie 参数

setcookie 函数可以接受 5 个参数:

setcookie(name,value,expiration,path,domain,secure,httponly);

  • name
  • value
  • expiration 指定 cookie 过期时间 没有设置则为 session(浏览器)关闭为止
  • path 指定 web 站点特定文件夹特定域的 cookie
  • domain 指定子域 cookie
  • secure 指定 cookie 应当通过 HTTPS 连接传送 1 为必须使用安全连接
  • httponly 限制对 cookie 的访问防止 xss 的利器

删除 cookie

通常 cookie 会在用户浏览关闭或者过期时间到了之后自动过期,但是我们还是需要手动删除它

删除 cookie 有两种方法:

  • setcookie(name,''); or setcookie(name,FALSE); 把值设为空
  • setcookie(name,FALSE,time() - 600); 把过期时间设为过去

什么是 session

session 是一种解决方案,解决的问题是它可以跟踪用户在一系列页面访问的数据

session 和 cookie 的区别:

  • cookie 存储在客户端,session 存储在服务器端
  • session 通常更安全,数据不会在客户端和服务器端来回传输
  • session 能够存储比 cookie 更多的东西
  • session 可以在用户不接受他们浏览器中的 cookie 时工作
  • cookie 更加容易创建和检索
  • cookie 对服务器造成的压力更少
  • cookie 能够持续更长的时间

创建 session

使用 session_start 函数创建,访问或者删除 session

这个函数在首次启动时,会发送一个 cookie,所以必须在任何 HTML 发送给浏览器之前调用,在使用 session 的页面中,脚本必须起始行调用 session_start 函数

在第一次开启 session 时,会产生一个随机的 session ID,并向浏览器发送一个名为 PHPSESSID 的 cookie

启用 session,向数组 $_SESSION 赋值的形式为:

$_SESSION['username']= 'daige';

函数 session_name 函数可以修改 session 的名称来替代 PHPSESSI,而且应该在调用 session_start 函数之前使用

函数 session_set_cookie_params 函数用来修改 session cookie 的设置

访问 session 变量

创建或者访问一个存在的 session,都必须从 session_start 函数开始

访问变量和普通数组一样,如$_SESSION['mail'];

  • isset($_SESSION['var'])可以查看特定的 session 值是否存在
  • session中的数据都是以纯文本的方式保存在一个可读可写的文本文件中,不要在 session 中存放敏感的数据
  • 为了提高安全性,session 可以加密存储,读取 session 时解密

删除 session

session 的数据在两个地方存在,所以需要在两个地方进行删除操作

必须从 session_start 函数开始,然后设置 $_SESSION 数组来删除 session 值

$_SESSION = array(); 最后在服务器上删除 session 数据session_destroy();