PHP会话生存期问题

PHP会话生存期问题,php,session,Php,Session,我用的是PHP5。我做了一个登录系统,根据数据库中的记录检查用户名和密码。我想使用会话来存储记录的值。例如,当我到达成功“登录”用户的区域时: if($errors = 0) { $_SESSION['logged'] = "1"; } 问题是,我希望$\u会话['logged']保持活动状态5分钟,这样当我执行时,如果($\u会话['logged']=“1”)在此时间之后返回false。此外,我想在用户关闭浏览器后删除此会话。基本上,我需要一个会话配置,这样用户可以安全地离开他的办公

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

if($errors = 0) {
    $_SESSION['logged'] = "1";
}
问题是,我希望
$\u会话['logged']
保持活动状态5分钟,这样当我执行
时,如果($\u会话['logged']=“1”)
在此时间之后返回false。此外,我想在用户关闭浏览器后删除此会话。基本上,我需要一个会话配置,这样用户可以安全地离开他的办公桌,当他或某人在10分钟后按下刷新键或在浏览器关闭后再次进入时,会话将被删除,访问将受到限制


有人能帮忙吗?谢谢。

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

只要用户留在您的站点上,会话就会保持活动状态。您必须使用cookies来设置特定的超时

用于更改会话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();
}
if($_会话['lastActivity']+300)
用于更改会话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();
}
if($_会话['lastActivity']+300)
您可以更改配置设置,例如在php.ini或.htaccess文件中:

session.cookie_生存期指定 cookie的生存期(以秒为单位) 将其发送到浏览器。这个 值0表示“直到浏览器关闭” “已关闭。”默认值为0


这意味着(我认为)你不能同时拥有基于超时的到期和浏览器关闭时的到期。因此,最好的办法可能是保持默认设置,并按照其他人的建议在
$\u会话中设置自己的计时器,从而使此答案毫无意义。

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

session.cookie_生存期指定 cookie的生存期(以秒为单位) 将其发送到浏览器。这个 值0表示“直到浏览器关闭” “已关闭。”默认值为0


这意味着(我认为)你不能同时拥有基于超时的到期和浏览器关闭时的到期。因此,最好的办法可能是保留默认值,并按照其他人的建议在
$\u会话中设置自己的计时器,从而使此答案变得毫无意义。

与其将其设置为一,不如将
$\u会话['logged\u time']=time()设置为一个
然后对照应用程序中的时间()检查时间


如果您想实际使整个会话过期,具体细节可能会根据会话处理程序的不同而有所变化,但是对于默认会话处理程序(以及任何其他性能良好的会话处理程序),您需要签出而不是将其设置为一,为什么不设置
$\u session['logged\u time']=time()
然后对照应用程序中的时间()检查时间


如果您想让整个会话真正过期,具体细节可能会因会话处理程序的不同而有所不同,但对于默认会话处理程序(以及任何其他性能良好的会话处理程序),您需要查看一下

我曾经读过一次session.gc\u maxlifetime,以及它是如何将会话发送到“垃圾”的。我想我可以用这样的东西?我曾经读过关于session.gc_maxlifest的文章,以及它是如何将会话发送到“垃圾”的。我想我可以用这样的东西?您可以销毁cookie,但通常会话在会话被销毁之前仍然有效,PHP通常将会话称为被垃圾收集的会话。只有当你有一个配置错误或恶意浏览器的用户,或者他们的cookie被盗/被嗅探等情况下,区别才有意义。@Daniel Papsian:这就是为什么你在检查超时后死亡的原因。cookie仅包含会话id(默认情况下)。恶意用户无法修改使用服务器时间的
lastActivity
时间(因此更改客户端时间对该值没有影响)。您可以销毁cookie,但通常会话在会话被销毁之前仍然有效,PHP通常将其称为被垃圾收集的会话。只有当你有一个配置错误或恶意浏览器的用户,或者他们的cookie被盗/被嗅探等情况下,区别才有意义。@Daniel Papsian:这就是为什么你在检查超时后死亡的原因。cookie仅包含会话id(默认情况下)。恶意用户无法修改使用服务器时间的
lastActivity
时间(因此更改客户端时间不会影响该值)。请参阅