关于Session中的session.gc_*

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


我的做法是: 通过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()来修改。


<?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文件也是依然会存在的。

注意:
1、session默认以文件方式保存,不过太多的session在一个目录下是不利于存取的。php.ini里面有个设置可以让session分子目录保存
session.save_path = "N;/path" N表示几级子目录,比如你可以设置成 session.save_path = "2;/tmp"
但是你设置成分子目录后,原来的garbage collection 就没用了,需要你自己去清楚过期session,比如用个shell定时执行。
(以上内容大家仔细看看php.ini里面的注释就知道了)

2、很多人都习惯在php程序的头部打开session就不管它了,程序结束会自动关闭session的。不过从性能上考虑session应该尽早关闭,特别是多于执行时间比较长的程序。因为session文件在打开的时候是独占的,比如a.php打开了的session文件后并不关闭,而本身程序要执行比较长时间。同时你打开了b.php也是需要session的,就要等a.php执行完才能打开了。

所以建议a.php预先处理好session,然后关闭它,在执行其他功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值