【发布时间】:2012-03-27 22:46:13
【问题描述】:
我有写文章的用户,当他们离开电脑一段时间然后回来提交帖子时,作者/user_id 被记录为 NULL 值。我假设会话即将到期。我有:
ob_start();
session_start();
if(isset($_SESSION['user_id'])) {
$ext = time() + 31560000;
setcookie('name', $_SESSION['user_id'], $ext);
}
在用户登录时重定向的索引页面的顶部。
此外,这也是他们实际登录时发生的情况:
$user_id = get_user_id($some_variable); // get's the user_id
$username = get_username($some_variable); // get's username
$_SESSION['user_id'] = $user_id;
?>
<script type="text/javascript">
window.location = 'http://site.com/<?php echo $username; ?>';
</script>
<?php
exit();
这是否正确配置,为什么用户的会话会过期?他们没有退出浏览器,只是不活动。这是什么原因造成的?
【问题讨论】:
-
检查您的
php.ini设置session.gc_maxlifetime 的设置。默认值为 1440 秒或 24 分钟。在这段时间之后,旧的会话数据可能会被清除。 -
session.gc_maxlifetime = 1000000(随机数)是否是在 php.ini 中写入的正确方法?
-
是的,这将在全球范围内进行。您也可以在脚本中使用ini_set,但如果这样做,则必须确保与会话交互的所有脚本都使用相同的值。确保它足够大以满足您的需求,但不要太大,您最终会在服务器上留下大量旧会话数据。
-
那么,它会在 24 分钟后过期吗?不活动,但最大为 86400(如果我提供该值)?或者,即使不活动,86400 也不会过期?不活动显然是这里的问题。
-
只要他们不关闭浏览器,它就会有效地将可能清理之前的最大不活动时间设置为 86400。清理可以根据
session.gc_probability和session.gc_divisor之后的一段时间进行。您也可以在关闭浏览器后修改会话 cookie。