3

嗨,我是编程新手,但目前正在处理会话超时问题。基本上,即使我更改了 session.gc_maxlifetime,我的会话也会超时。我认为另一个使用同一目录存储会话数据的脚本没有设置 maxlifetime 正在运行,因此它将使用较短的值。为了解决这个问题,我更改了 htaccess 文件,但它在 1 小时 30 分钟后仍然终止,我需要它持续更长时间。我的 htaccess 文件如下。我已经查看并尝试了该板上的许多相关帖子,但到目前为止没有任何效果。任何想法将不胜感激。

SetEnv PHPRC /home/rocket/public_html/php.ini

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

<IfModule mod_php5.c>
php_value session.save_path "new/username/php_sessions"
php_value session.gc_maxlifetime "86400"
php_value session.cookie_lifetime "86400"

</IfModule>


# END WordPress
4

1 回答 1

3

PHP 不会像您认为的那样处理会话 cookie...

php_value session.gc_maxlifetime "86400"

这只是设置了可能发生垃圾收集的时间 - 因为在此时间之后会话数据垃圾收集的可能性很小,这不太可能是罪魁祸首。

php_value session.cookie_lifetime "86400"

这设置了会话 cookie 过期的时间……它不会更新,session_start()因此,如果您在一页上启动会话,则会设置时钟滴答作响。从一个页面移动到另一个页面不会重置“时钟”,因此cookie_lifetime600 的会话将在它开始后 10 分钟而不是在 10 分钟不活动后过期- 您可能会看到这种行为。

最好的办法是设置php_value session.cookie_lifetime "0"这意味着会话 cookie在用户关闭浏览器时才会过期。

如果您想处理在一段时间不活动后触发的任意到期,最好在 PHP 代码中通过在会话中设置一个变量来执行此操作,例如$_SESSION['expires']在每个页面的开头检查/更新/处理它。

于 2012-05-22T15:28:25.697 回答