因http协议是无状态的,服务器会把客户端的请求的请求都当到独立的行为,无法区别客户端。
这就出现会话机制,session cookie,其应用比如:
一个超市搞活动,满1000送100,但很少客户一次买1000,需要累积记录上次消费金额。
客户需要一张会员卡,记录个人信息,商家通过客户的会员卡编号找到客户信息。
cookie
设置 setCookie($name,$value,$expire,$path,$domain,$secure,$httponly);
获取 $_COOKIE
删除 setcookie('name',''); setcookie('name','value',time()-10000);
优缺点
存储在客户端,不占用服务器资源
存储在客户端,安全性较低,只能存储字符串,容量较小
session
需要先session_start()
设置 $_SESSION['name'] = value;
获取 $_SESSION['name']
删除
unset($_SESSION['name'])
session_destory() 销除当前会话的所有数据
优缺点
存储在服务端,安全性相对较高,数据类型多,容量大
存储在服务端,用户较多时,占用容量空间资源
回收机制
php.ini中设置
session.gc_maxlifetime = 1440 默认24分钟
session.gc_probability = 1
sesson.gc_divisor = 100
每请求100次,删除一个已过期的session文件
禁用cookie后session是否可用问题
可心使用get传值的方式
前端可使用session_name() = session_id()
SID
(
string)
多服务session共享问题
把session存到数据库 redis
session.save_handler = redis
session.save_path =
"tcp://127.0.0.1:6379"