会话控制
为什么要用?
HTTP协议无状态协议,同一用户请求相同页面多次会被当成不同用户的独立请求。会话控制,允许服务器跟踪同一客户端做出的连续请求,这样可以保持登录状态等
GET参数传递
能用不推荐,缺点:url能获取到不安全,容易丢失
Cookie
//设置cookie
setcookie($name,$value,$expire,$path,$domain,$secure);
//设置数组形式cookie
setcookie('a['b]','val);
//读取cookie
$_COOKIE
//删除cookie,设置为过期
setcookie($name,'',time()-1000);
cookie
优点:存储在客户端不占用服务器资源
缺点:因为存储在客户端,不建议将敏感,重要信息保存。而且用户可以禁止cookie使用
Session
Session并不是完全脱离cookie的,是基于cookie的,可以通过cookie来获取sessionid
//session的使用
//开启session
session_start();
//使用session
$_SESSION;
//清空session
#_SESSION = [];
//删除session
session_destory();
//session的设置
session.auto_start //是否自动开启session_start
session.cookie_domain //存储sessionId的cookie的有效域名
session.cookie_lifetime
sesson_cookie_path
session_name//默认名字为PHPSESSID,可以更改
session.save_path//session在服务器存储在哪儿路径下
session.use_cookies//是否使用cookie来传递sessionid
session.use_trans_sid//是否使用页面传递的方式传递sessionid
//session垃圾回收机制
session.gc_probability
session.gc_divisor
session.gc_maxlifetime//session最大生命周期
ex.
//文件超过1440s过期,每访问100次有1次的几率删除过期
session.gc_maxlifetime = 1440
session.gc_divisor = 100
session.gc_probability = 1
session.save_handler//session存储的句柄,可以存储到redis和mongodb和mysql等
session优点:安全
缺点:占服务器,
分布式session只存在一台,仅一台可用,但可以使用redis共享
传递SessionID的问题
禁用cookie情况下用session_name()和session_id()
<a href="1.php?PHPSESSID=sessid的值">下个页面</a>
sess_sessionid的值
<a href="1.php?<?php echo session_name() .'='.session_id()?>">下个页面</a>
//SID开启cookie为空,未开启cookie就是session_name() .'='.session_id()的拼接,
<a href="1.php?<?php echo SID;?>">下个页面</a>
session存储
//mysql,memcache,redis
session_set_save_handler()
网友评论