background image

在超过这一时间之后

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);
    }