PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级 » 关于Session中的session.gc_*
本页主题: 关于Session中的session.gc_* 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

自由的龙

该用户目前不在线
级别: 中级程序员
精华: 1
发帖: 1264
威望: 1267 点
金钱: 12660 PYMB
贡献值: 0 点
在线时间:0(小时)
注册时间:2006-04-16
最后登录:2006-06-27

关于Session中的session.gc_*


关于 liufei2222 同学
关于登录超时,自动退出页面的问题!


QUOTE:
我的做法是: 通过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精华贴。我记得我发过。


============================================================

举例:

我测试的程序如下:


CODE:[Copy to clipboard]<?php
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 "<br>";
    echo $_SESSION['test'];
}
else
{
    $_SESSION['test']     = date("Y-M-D H:i:s");
}

echo "<br>";
echo ini_get("session.gc_maxlifetime");
echo "<br>";
echo ini_get("session.cookie_lifetime");


?>
这种情况下,gc的最大过期时间比 Session的过期时间短,但是还是按照session的过期时间过期。

注意: WEB是触发式的。所以在你直接关闭IE的情况下,session文件也是依然会存在的。
顶端 Posted: 2006-04-25 14:16 | [楼 主]
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级

时:11-23 19:57 Copyright © 2006 phpwhy.com 权
ICP05060669

曳息 -