在超过这一时间之后
session 信息立即会得到删除。因为 GC 是按机率启动的,可能在某一
个长时间内都没有被启动,那么大量的
session 在超过 gc_maxlifetime 以后仍然会有效。
解决这个问题的一个方法是,把
session.gc_probability/session.gc_divisor 的机率提高,
如果提到
100%,就会彻底解决这个问题,但显然会对性能造成严重的影响。另一个方法是
自己在代码中判断当前
session
的生存时间,如果超出了
gc_maxlifetime,就清空当前
session。
但是如果你没有服务器的操作权限,那就比较麻烦了,你需要通过
PHP 程序改写
SessionID 来 实 现 永 久 的 Session 数 据 保 存 。 查 查 php.net 的 函 数 手 册 , 可 以 见 到 有
“session_id”这个函数:如果没有设置参数,那么将返回当前的 SessionID,如果设置了参数,
就会将当前的
SessionID 设置为给出的值。
只要利用永久性的
Cookie 加上“session_id”函数,就可以实现永久 Session 数据保存了!
但是为了方便,我们需要知道服务器设置的
“session.name”,但是一般用户都没有权限
查看服务器的
php.ini 设置,不过 PHP 提供了一个非常好的函数“phpinfo”,利用这个可以查
看几乎所有的
PHP 信息!
<?php
phpinfo();
打开编辑器,输入上面的代码,然后在浏览器中运行这个程序,会见到
PHP 的相关信
息。其中有一项
“session.name”的参数,这个就是我们需要的服务器“session.name”,一般是
“PHPSESSID”。
记下了
SessionID 的名称后,我们就可以实现永久的 Session 数据储存了!
<?php
session_start();
ini_set('session.save_path','/tmp/');
//6 个钟头
ini_set('session.gc_maxlifetime',21600);
//保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
另外对于设置
php session 的生存时间,网上看到有网友写了一个很不错的方法,这里
将代码分享一下:
<?php
function start_session($expire=0){
if($expire==0){
$expire=ini_get('session.gc_maxlifetime');
}else{
ini_set('session.gc_maxlifetime',$expire);
}
if(empty($_COOKIE['PHPSESSID'])){
session_set_cookie_params($expire);
session_start();
}else{
session_start();
setcookie('PHPSESSID',session_id(),time()+$expire);
}