PHP会话超时

4

我有一些关于php会话超时的问题。在应用程序运行期间,我已经设置了以下值:

session.gc_maxlifetime = 3600
session.cookie_lifetime = 3600
session.save_path = myApplicationPath/tmp
session.use_cookies = 1
session.use_only_cookies = 1

然而,我的会话在大约30分钟后过期。此外,我的tmp目录保持为空,因此似乎实际上没有设置任何cookie。尽管如此,使用ini_get("session.save_path")命令返回了正确的路径。


1
只是为了检查:确保在调用 session_start 之前设置 ini 值。此外,您可以将 phpinfo() 的输出放入测试文件中进行比较。 - hakre
值确实在session_start之前设置。phpinfo显示:本地值var / www / myproject / tmp主值/ etc / lib / php5。会话文件仍然写入主值。 - eelco
找到了!使用Zend_Session,您不会收到有关在其他地方启动会话的通知。当我停止使用Zend_Session时,我得到了通知。将我的代码放在引导程序的高处解决了这个问题。 - eelco
2个回答

2

注意:

如果不同的脚本具有不同的session.gc_maxlifetime值,但共享存储会话数据的同一位置,则具有最小值的脚本将清理数据。在这种情况下,请与session.save_path指令一起使用。

PHP手册


OP描述了相反的行为:尽管session.gc_maxlifetime设置为6分钟,但会话在30分钟之前不会过期。 - Gumbo
据我所知,session.gc_maxlifetime的值是1小时,因此会话在预期时间之前就会过期。 - RiaD
哦,哇,抱歉,这是我的错。不知道我怎么会把3600秒误解为60分钟的6呢。;) - Gumbo

1
我认为 PHP 找不到你的 `save_path`,或无权在其中写入,因此它会将会话文件(而非 cookie)存储在默认的共享目录中(所以具有最短 `gc_maxlifetime` 的站点将从所有其他站点删除会话)。

这也是我的猜测。save_path的输出给出了正确的路径,而且该目录具有777权限。 - eelco
会话文件确实写入了默认目录。我在这里错过了什么? - eelco
session.save_path = myApplicationPath/tmp: 你的真实路径是否没有以斜杠开头? - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接