PHP-会话控制

会话控制

为什么要用?
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()

下个页面
sess_sessionid的值
下个页面

//SID开启cookie为空,未开启cookie就是session_name() .'='.session_id()的拼接,
下个页面

session存储

//mysql,memcache,redis
session_set_save_handler()

你可能感兴趣的:(PHP-会话控制)