# re: PHP会话(Session)使用入门
2007-11-06 23:32 | 鱼有所思
关于Session中的session.gc_*
关于 liufei2222 同学
关于登录超时,自动退出页面的问题!
引用:
我的做法是: 通过Session 控制
失败1:在 php.ini 中设定 session 失效的时间,我设置session.gc_maxlifetime为180,可是我等了足足5分钟(可能有8分钟),可是我依然能进入系统.设置后有重启linux.
失败2:在 程序中插入函数 ini_set('session.gc_maxlifetime',180);(session_start前加入),超时后依然能进入.
请问:该怎么做?
一开始我也不是很明白,想当然的以为这个是用来控制Session文件的.这里设置的时间,过期后,/tmp/sess_*的文件就会自动删除.
后来自己做了一下测试好象也不行.
看文档发现,在session的configure option中有三个关于gc的,分别是:
session.gc_probability "1" PHP_INI_ALL
session.gc_divisor "100" PHP_INI_ALL Available since PHP 4.3.2.
session.gc_maxlifetime "1440" PHP_INI_ALL
咱们一个个看.
首先 gc是什么?
gc, 是garbage collection 的简称.这个进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件. 大家应该猜到三个参数的大致用处了吧?
1、session_gc_probaility
PHP默认不是每个SESSION启动都会启动一个GC来跟踪。这个参数是控制gc跟session启动概率。默认 1。值越大,概率越大。
2、session.gc_divisor
功能同上。 默认100。值越小,概率越大。
3、session.gc_maxlifetime
超过设定时间,gc就认为是垃圾文件。
总结
session_gc_probaility和session.gc_divisor是一对控制gc启动的概率的两个参数。前者是分子,后者是分母。默认是1/100。 1%的几率。 也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动。
=============================================================
而关于SESSION 过期大家也应该有更明确的认识
只有session.cookie_lifetime 控制SESSIOn的过期时间.
可以通过直接修改ini,或者通过ini_set();以及session_set_cookie_params()来修改。
具体看坛子里的其他SESSION精华贴。我记得我发过。
============================================================
举例:
我测试的程序如下:
ini_set("session.gc_divisor", 1);
ini_set("session.gc_maxlifetime", 5);
ini_set("session.cookie_lifetime", 10);
session_start();
if (isset($_SESSION['test']))
{
echo SESSION_ID();
echo "
";
echo $_SESSION['test'];
}
else
{
$_SESSION['test'] = date("Y-M-D H:i:s");
}
echo "
";
echo ini_get("session.gc_maxlifetime");
echo "
";
echo ini_get("session.cookie_lifetime");
?>
这种情况下,gc的最大过期时间比 Session的过期时间短,但是还是按照session的过期时间过期。
注意: WEB是触发式的。所以在你直接关闭IE的情况下,session文件也是依然会存在的。
回复 更多评论