嗨,我是编程新手,但目前正在处理会话超时问题。 基本上,即使我更改了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
PHP 不会像你认为的那样处理会话 cookie...
php_value session.gc_maxlifetime "86400"
这仅设置了可能发生垃圾收集的时间 - 因为在此时间之后会话数据被垃圾收集的可能性很小,这不太可能是罪魁祸首。
php_value session.cookie_lifetime "86400"
这将设置会话 Cookie 过期的时间...但它不会在session_start()
更新,因此,如果您在一个页面上启动会话,则会设置时钟滴答作响。从一个页面移动到另一个页面不会重置"时钟",因此cookie_lifetime
为 600 的会话将在启动 10 分钟后过期,而不是在 10 分钟不活动后过期 - 您可能会看到此行为。
您最好的办法是设置php_value session.cookie_lifetime "0"
这意味着会话 cookie 仅在用户关闭浏览器时过期。
如果你想处理在一段时间不活动后触发的任意过期,最好通过在会话中设置一个变量来在 PHP 代码中执行此操作,例如$_SESSION['expires']
并在每个页面的开头检查/更新/处理它。