PHP会话生存期问题

时间:2009-07-23 18:10:35

标签: php session

我在这里使用PHP5。我已经建立了一个登录系统,根据数据库中的记录检查用户名和密码。我想使用会话来存储记录的值。例如,当我到达我成功“登录”用户的区域时:

if($errors = 0) {
    $_SESSION['logged'] = "1";
}

问题在于我希望$_SESSION['logged']保持活动状态让我们说5分钟,所以当我在此之后执行if($_SESSION['logged'] == "1")返回false时。此外,我想在用户关闭浏览器后删除此会话。基本上,我想要一个会话配置,以便用户可以安全地离开他的桌面,当他或某人在10分钟后按下刷新或在浏览器关闭后再次进入时,会话已被删除,并且访问受到限制。

有人可以帮忙吗?感谢。

4 个答案:

答案 0 :(得分:3)

使用session_set_cookie_params()更改会话Cookie的生命周期。请注意,默认情况下,它设置为 0 ,这意味着Cookie会一直设置,直到用户退出浏览器。您可以通过以下方式执行此操作:

/* Set to 0 if you want the session
   cookie to be set until the user closes
   the browser. Use time() + seconds
   otherwise. */

session_set_cookie_params(0);
session_start();

然后检查上次活动时间,每次有人访问页面时都会更新。

if(($_SESSION['lastActivity'] + 300) < time()) {
    // timeout, destroy the session.
    session_destroy();
    unset($_SESSION);
    die('Timeout!');
} else {
    $_SESSION['lastActivity'] = time();
}

答案 1 :(得分:2)

为什么不设置$_SESSION['logged_time'] = time();,然后在应用程序中检查时间()的时间,而不是将其设置为1?

如果您希望实际到期整个会话,具体细节可能会根据您的会话处理程序而改变,但对于默认会话处理程序(以及任何其他表现良好的会话处理程序),您需要查看{{ 3}}

答案 2 :(得分:1)

您可以更改配置设置session.cookie_lifetime,例如在php.ini或.htaccess文件中:

  

session.cookie_lifetime指定   cookie的生命周期   这是发送到浏览器。该   值0表示“直到浏览器为止   关闭。“默认为0。

这意味着(我认为)在浏览器关闭时,您不能同时基于超时和到期。所以也许最好的办法就是保持默认值,并像其他人建议的那样在$_SESSION设置你自己的计时器,从而使这个答案毫无意义。

答案 3 :(得分:0)

只要用户停留在您的网站上,会话就会保持活跃状态​​。您必须使用cookie来设置特定的超时。