在PHP中设置会话过期时间的方法
在大多数数据情况下,我们使用会话过期时间的默认设置时间。对于某些特殊请求,我们可以设置会话过期时间。在这方面,你可以在PHP中,设置的session.gc_maxlifetime,#(PHP5 = 1440,默认24分钟)
你可以在这里设置到期时间,但是有人说它在设置后无效!
事实上,它不起作用,但因为系统默认了:
session.gc_probability = 1
session.gc_divisor = 1000
垃圾收集的概率是1 1000是会话1000倍被回收。
只要你有大量的访问,就可以达到恢复的效果。
或者你可以设置的session.gc_divisor价值,太。
例如,session.gc_divisor = 1,所以你可以清楚地看到过期的影响。
我们使用的最常见的东西是在PHP程序中设置,如下所示:
< PHP
如果(!isset($ _session { 'last_access})| |(时间)($ _session { 'last_access ' })> 60)
_session美元{ 'last_access} =时间();
>
这是完成的,它可以在程序中实现,如果它是过期的:
< PHP
撤消($ _session { 'last_access}); / /或$ _session { 'last_access} =;
>
会话有过期机制:
session.gc_maxlifetime旧会话过期是小概率事件。session.gc_probability和session.gc_divisor分别确定在运行会话GC的概率。对session.gc_probability和session.gc_divisor默认值是1和100分别作为分子和分母,在会话GC的概率是1%。如果这两个值进行修改,PHP的效率会降低,所以这种方法是错误的!
因此,在php.ini文件中修改gc_maxlifetime变量可以延长会话过期时间:(例如,改变我们的过期时间为86400秒)。
session.gc_maxlifetime = 86400
然后,重新启动Web服务(通常是Apache)。
会话恢复何时发生:
默认情况下,每个PHP请求都有1/100恢复的概率,所以可以简单地理解,每100个PHP请求发生一次恢复,这个概率由以下参数控制
#概率gc_probability / gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注1:假设这种情况下,gc_maxlifetime = 120,如果一个会话文件的最后修改时间是120秒,那么会话仍然有效,直到下一次复苏(1 / 100的概率)发生。
注2:如果你的会话使用session.save_path保存会话的其他地方,会话恢复机制可能不会自动处理过期的会话文件。你需要手动删除过期的会话(或crontab)此时。
CD /路径/ /次;发现| xargs rm Cmin + 24
PHP中的会话从不过期。
最好不要修改程序,因为如果你修改程序,测试部门一定很郁闷,那么你只能修改系统环境配置。事实上,这是很简单的打开php.ini设置文件和修改三线如下:
1、session.use_cookies
将此值设置为1,使用cookie传递SessionID
2、session.cookie_lifetime
这代表了SessionID存放在客户端的cookie的时间,默认是0,而浏览器关闭当浏览器关闭SessionID…正是因为这个,所以PHP的会话不能永久使用!让我们把它设为一个数,我们认为它很大,999999999个怎样,是的!够了就要这些。
3、session.gc_maxlifetime
这是会话数据存储在服务器端的时间,如果超过这个时间,会话数据将自动删除!所以我们把它设为99999999。
因此,所有的好,当然,如果你不相信我,看看测试集10个会话值和一个半月回来看看你的电脑是否开启,你仍然可以看到这。
当然,你不可能控制服务器的权限,不是我可以修改php.ini设置为幸运,都依靠我们自己也是一种方式,当然应该用来存储cookie的客户端,在客户端的SessionID cookie存储,设置cookie的值,那么这个值传给(session_id)这一功能,具体措施如下:
< PHP
session_start(会话); / /开始
_session美元{ count'}会话数; / /登记变量
isset($ PHPSESSID)session_id($ PHPSESSID):$ PHPSESSID = session_id();
/ /如果为PHPSESSID设置,这将分配至PHPSESSID或SessionID代
_session美元{ count} + +; / /添加1的变量数
setcookie('phpsessid,PHPSESSID美元,时间)(+ 3156000); / / SessionID的Cookie存储
回声计数;
>
会议传递失败
让我们先编写一个PHP文件:将它传递给服务器以查看服务器的参数配置。
去届节看到session.use_trans_sid参数设置为零。
此参数指定是否启用透明SID的支持,即无论会议传递的URL。我个人的理解是,一旦这个参数设置为0,那么每个URL将启动一个会话。下一页将不会被追溯到前一页,这就是我们所说的会话,不过去了。两页生成两个会议文件在服务器端和无关。(这里的具体原理有待确认)
这样的一个方法是改变session.use_trans_sid值为1在配置文件中的。
当然,我们知道并非每个人都有权更改PHP的配置,那么间接解决方案是什么呢
这里有两个例子来说明:
1 test1.php文件
< PHP
那就是使用一个用户ID会话标识。
session_id(SID);
开始会话
session_start();
会议 / /名称=价值
_session美元{ 'name' } =夏晖;
/ /输出会话,并设置超链接到第二页test2.php
回声。_session美元{ 'name' }。;
>
文件2:test2.php
< PHP
它显示了使用用户ID作为标识的会话。
session_id(SID);
开始会话
session_start();
在test1.php会话转移输出。
回声这是_session 'name' } {美元;
>
所以重点是session_start(),加上session_id(SID)之前。当页面转换时,服务器使用服务器会话文件夹中用户保存的会话,从而解决了交付问题。
但朋友反映,这样,多个用户会话是写在西德和会话的值将不出来。所以也有另一种不添加session_id解决这个问题(SID);前提是你已经配置的权限,服务器的php.ini:
output_buffering改变,真理不。
第二个可能的原因是没有读取权限的文件夹的服务器上的会话,或回phpinfo.php看到保存会话的地址:
session.save_path:VaR /tmp
因此,它只是检查是否可以编写var文件夹。
写一个文件:test3.php测试:
< PHP
回声var_dump(is_writeable(ini_get(的会议。save_path ))))
>
如果你返回bool(假)证明该文件夹的写权限的限制,然后换一个文件夹添加到网页你写。
设置会话保存路径的当前目录会话文件夹。
sesssavepath美元= dirname(__file__)。 /会话/;
如果新的读写路径(可以通过FTP改变文件夹属性为777),那么让路径效果。
如果(is_writeable($ sesssavepath)is_readable($ sesssavepath))
{
session_save_path($ sesssavepath);
}