8. 会话控制
简述cookie和session得区别及各自的工作机制,存储位置等,简述cookie的优缺点;(会话控制技术,工作原理和优缺点);
(为什么要使用会话控制技术? 因为用户端和服务端是通过http协议来传输的,而http协议是无状态的,也就是说同一个用户请求两次http协议不会认为这是一个人发出的,会认是独立的操作,没有办法保持用户的登录状态,cookie和session可以保持用户登录的状态);
会话控制技术:
Cookie: 存储在客户端的文件,保存客户的信息;
设置: setcookie($name,$value,$expire,$path,$domain)
名称, 值, 生存时间,路径, 域名
获取:$_COOkIE[‘name’]
删除:setcookie($name,’’,time()-1)让它过期
Cookie的优点缺点:
Cookie是存储在客户端的,效率会高一些,但是不够安全,而且用户禁用cookie就没办法操作了;
Session: 存储在服务器,是基于cookie的;
操作: session_start();
$_SESSION[] = 1; 设置
$_SESSION = []; 删除
Session_destroy();删除,也会删除对应的session文件
配置(php.ini):
Session.auto_start: 是否自动开启session
Session.cookie_domain: 存储sessionid的cookie的有效域名
Session.cookie_lifetime: 生存时间(=0是不过期)
Session.cookie_path:默认路径
Session.save_path:session在服务器当中的保存路径
Session.name:session的键名默认phpsessid
Session的垃圾回收机制
Session.gc_probability = 1 //操作次数
Session.gc_divisor = 100 //session的start次数
Session.gc_maxlifetime = 1000 //最大生存周期
每100次session_start会清除最后一次修改大于1000的session文件
Session的优点缺点:信息安全,占用服务器资源,分布式问题(可以使用redis解决),
传递sessionId的问题:
如果cookie别禁用可以使用传递的方式
<a href=’1.php?<?php echo SID;?>’>next</a>
当cookie开启的时候SID为空,禁用的时候SID为sessionId;
Session的存储问题:
如果是分布式的话可以把session存储在redis中,避免存在一个服务器轮询到下个服务器找不到session的情况;
修改session.set_save_hendler()