自动摘要
正在生成中……
需求:
程序中需要自定义session的过期时间,例如:今天想要session过期时间为:10天后,下一个阶段又想要过期时间为:3个月后,那这种需求你总不能每次都去修改php.ini解决吧,那么有没有一劳永逸,而且又很简单的方法呢?当然有了,且看我怎么投机取巧的。
实现:
第一步
修改三行如下:
1、session.use_cookies=1
#把这个的值设置为1,利用cookie来传递sessionid
2、session.cookie_lifetime=99999999
#这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……
就是因为这个所以PHP的session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。
3、session.gc_maxlifetime=99999999
#这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
那么我们也把它设置为99999999。当然也可以了~
第二步
- 代码中做相应修改,特意奉上session控制类,大致的思想是:每次进行session设置的时候,都会将每个字段组装成一个数组,其中包括一个过期时间字段;这样在每次查找指定session字段的时候,都会校验下过期时间,如果过期那么将这个session干掉,如果没过期,那就接着用了!
?php
class Session{
public static function set($name, $data, $expire=600){
$session_data = array();
$session_data['data'] = $data;
$session_data['expire'] = time()+$expire;
$_SESSION[$name] = $session_data;
}
public static function get($name){
if(isset($_SESSION[$name])){
if($_SESSION[$name]['expire']>time()){
return $_SESSION[$name]['data'];
}else{
self::clear($name);
}
}
return false;
}
public static function clear($name){
unset($_SESSION[$name]);
}
}
?>
第三步
使用实例:
require_once(__DIR__."/./session.php");
session::set('userid',$uid,$lifeTime);
$userid = session::get('userid');
总结:
这样设计就再也不用担心服务端session过期时间及客户端cookie过期时间了;完全受你控制,是不是很方便呢?
作者:古佛青灯度流年
链接:https://www.jianshu.com/p/177da6a47b03
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。