需求:
程序中需要自定义session的过期时间,例如:今天想要session过期时间为:10天后,下一个阶段又想要过期时间为:3个月后,那这种需求你总不能每次都去修改php.ini解决吧,那么有没有一劳永逸,而且又很简单的方法呢?当然有了,且看我怎么投机取巧的。
实现:
第一步
- 从
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
/**
* Session控制类
*/
class Session{
/**
* 设置session
* @param String $name session name
* @param Mixed $data session data
* @param Int $expire 超时时间(秒)
*/
public static function set($name, $data, $expire=600){
$session_data = array();
$session_data['data'] = $data;
$session_data['expire'] = time()+$expire;
$_SESSION[$name] = $session_data;
}
/**
* 读取session
* @param String $name session name
* @return Mixed
*/
public static function get($name){
if(isset($_SESSION[$name])){
if($_SESSION[$name]['expire']>time()){
return $_SESSION[$name]['data'];
}else{
self::clear($name);
}
}
return false;
}
/**
* 清除session
* @param String $name session name
*/
public static function clear($name){
unset($_SESSION[$name]);
}
}
?>
第三步
使用实例:
require_once(__DIR__."/./session.php");
#存id:
session::set('userid',$uid,$lifeTime);
#取id
$userid = session::get('userid');
总结:
这样设计就再也不用担心服务端session过期时间及客户端cookie过期时间了;完全受你控制,是不是很方便呢?
@晴天-2017-09-01 12:53:50
网友评论