在用户注销之前,PHP 会话不应过期


PHP session should not expire until user logs out

在我的网站上,有时用户甚至没有点击"注销"按钮就会突然注销。为什么会这样?我已经检查了我的默认设置,

session.gc_divisor      1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  0   0

一切似乎都很好,因为垃圾收集器只是以session.gc_probability除以session.gc_divisor的概率启动的。使用该选项的默认值(分别为 0 和 1000),几率为 0%。那么为什么用户会被注销呢?请告诉我如何实现用户在单击"注销"按钮之前不应注销的功能,即session_start()在用户单击"注销"按钮之前不应进行垃圾收集?

如果我在每个脚本中包含下面的代码,它会起作用吗?

<?php
   ini_set('session.gc_maxlifetime', 30*60);
   session_start();
?>

你在共享主机上吗? 之前我在共享主机上遇到了同样的问题,其中会话文件存储在默认共享目录中,该目录被随机清除并删除会话文件。 我通过将会话文件移动到另一个目录来绕过它。

尝试将会话保存到您可以使用session_save_path("path/to/another/folder")可以控制的其他位置,看看是否有帮助。