因为HTTP是无状态协议,它不对之前的发生过的请求和响应的状态进行管理。也就是说HTTP没有一个内建的机制来维护两个事务之间的状态。当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户。而用户登录、购物车等,这些是需要服务器能够保存用户的状态的。会话技术就是用来完成这件事的。其思想是允许服务器跟踪客户端做出的连续请求。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。从另一方面来说,也正是因为HTTP协议本身是非常简单的,所以才会被应用在各个场景里。
一、通过GET参数传递
在get里面把状态传递到下一页;使用get参数传递不安全而且不稳定,不建议使用
二、cookie
Cookie本质上是服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者是硬盘中的技术。
发送cookie:
语法:setcookie(name,value,expire,path,domain,secure)
参数 | 描述 |
---|---|
name | 必需。规定 cookie 的名称。 |
value | 必需。规定 cookie 的值。 |
expire | 可选。规定 cookie 的有效期。 |
path | 可选。规定 cookie 的服务器路径。 |
domain | 可选。规定 cookie 的域名。 |
secure | 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。 |
读取Cookie $_COOKIE
数组
删除Cookie
删除cookie不能使用unset,因为$_COOKIE是只读的。要想删除,只需要让其过期就就行: setcookie($name,‘‘,time()-1000)
Cookie的优缺点
优点:存储在客户端,不会占用服务器的资源
缺点:信息保存在客户端,安全性得不到保障,而且用户可以关闭cookie。用户有权限禁止Cookie
三、Session
Sesssion技术是将数据存储在服务器当中,这样用户没有办法禁用Session的使用。但Session不是完全脱离Cookie的,而是基于Cookie的。SessionID是存储在Cookie的,如果用户禁用Cookie,可以URL传递SessionID的值。Session默认保存在服务器的文件中,文件名为: sess_sessionid的值。
session 的操作
session_start();//要使用之前一定要开启
$_SESSION
数组$_SESSION = [] 或者$_SESSION=null;
session_destroy();//同时会删除对应session的cookie
session 配置(php.ini):在 php.ini 中,以 session 开头的参数配置,是否开启、路径、名称等,以及 session.gc 开头的垃圾回收配置。
垃圾回收配置示例:
session.gc_probability=1 session.gc_divisor=100 session.gc_maxlifetime=1440
/**
表示数据在超过1440秒之后就会被视为垃圾,被视为垃圾之后由gc_probability / gc_divisor(gc_probability / gc_divisor = 1/100 = %1)来决定数据被清理的机会,
1/100 意味着在每个会话初始化时有 1% 的概率启动 gc 进程;
*/
session的优缺点
Session的分布式解决方案
通过 session_set_save_handler函数,将session保存在redis或者数据库中。
如果cookie被禁用,那么可以通过get来传递sessionid:
遍历的话直接遍历$_SESSION这个数组就可以了
原文:https://www.cnblogs.com/starshine-zhp/p/12820057.html