【发布时间】:2013-10-17 08:16:11
【问题描述】:
我正在将我的应用程序转移到另一台服务器,但我的 PHP 会话出现了一些问题,似乎没有过期。
在 php.ini 中我设置了:
session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 300
当然启用了 Cookie。而且,5 分钟后,如果我刷新页面,我仍然登录。即使我关闭浏览器并重新打开页面。 编辑:实际上,似乎关闭浏览器确实清除了会话。
由于每个请求首先通过某个脚本 (RewriteRule / begin.php),我很幸运,我可以解决这个问题:
session_start();
if (time() > @$_SESSION['sessionLimit']) {
session_destroy();
session_start();
}
$_SESSION['sessionLimit'] = time() + ini_get('session.gc_maxlifetime');
但是,我仍然不明白自己做错了什么以及为什么在旧服务器中一切正常(即使 session.gc_divisor 设置为 10)。
旧服务器:Windows Server 2003、Apache 2.4、PHP 5.4.5,全 32 位
新服务器:Windows Server 2008 R2、Apache 2.4、PHP 5.5.4,全 64 位
【问题讨论】:
-
auto_prepend_file是一种比 .htaccess 重写更好的“启动”脚本方式。 -
@NiettheDarkAbsol 不错。但我没有使用 .htaccess,它位于 Apache 的 conf 文件中。无论如何,begin.php 用于每个请求,包括图像等。
-
你的 session.save_path 设置是什么,运行在什么样的操作系统上?
-
@CBroe 它没有任何价值,但对于旧服务器也是如此。如问题所述,操作系统是 Windows Server 2008 R2。
-
@Wrikken 我是唯一使用该服务器的人。我打开的页面不涉及 AJAX。您的测试不会改变结果。