php中的session过期思考一二
3. PHP默认的(Linux为例), 是使用/tmp 作为Session的默认存储目录, 并且手册中也有如下的描述:
Note: 如果不同的脚本具有不同的 session.gc_maxlifetime 数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与 session.save_path 一起使用本指令。
也就是说, 如果有俩个应用都没有指定自己独立的save_path, 一个设置了过期时间为2分钟(假设为A), 一个设置为30分钟(假设为B), 那么每次当A的Session gc运行的时候, 就会同时删除属于应用B的Session files.
第二种 (错误答案)
设置 cookie的过期时间
session.cookie_lifetime. 这个参数来设置cookie的过期时间, 这个更不靠谱, cookie是客户端的, session是服务端的
第三种:(对的)
用memcached redis这种k-v数据库来存储session
当然, 面试不是为了难道你, 而是为了考察思考的周密性. 在这个过程中我会提示出这些陷阱, 所以一般来说, 符合题意的做法是:
1. 设置Cookie过期时间30分钟, 并设置Session的lifetime也为30分钟.
2. 自己为每一个Session值增加Time stamp.
3. 每次访问之前, 判断时间戳.
最后, 有同学问, 为什么要设置30分钟的过期时间: 这个, 首先这是为了面试, 第二, 实际使用场景的话, 比如30分钟就过期的优惠劵?
1 function SessExpire($expire = 0)
2 {
3 if($expire == 0){
4 $expire = ini_get("session.gc_maxlifetime");
5 } else {
6 ini_set("session.gc_maxlifetime", $expire);
7 }
8
9 if(empty($_COOKIE[PHPSESSID]){
10 session_set_cookie_params($expire);
11 session_start();
12 } else {
13 session_start();
14 setcookie(PHPSESSID, session_id(), time() + $expire);
15 }
16 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。