PHP会话超时

10 浏览
0 Comments

PHP会话超时

当用户登录时,我会创建一个会话,就像这样:

$_SESSION['id'] = $id;

我该如何指定该会话的超时时间为X分钟,并在达到X分钟后执行一个功能或页面重定向?

编辑:我忘了提到我需要会话因为长时间不活动而超时。

0
0 Comments

PHP Session timeout问题的出现原因是session的超时时间设置不当或者客户端删除了cookie。解决方法是在每次请求中记录用户上一次请求的时间,并在后续请求中检查距离上一次请求的时间是否超过了设定的超时时间。如果超过了超时时间,则session超时;否则,session保持有效。

然而,如果PHP配置文件(PHPINI)中的默认session超时时间比你设定的时间要短,那么session可能会在此之前超时。通常情况下,默认的超时时间不会超过一小时。如果你不希望客户端控制超时时间,你需要将上述代码与session.cookie_lifetime的ini_set函数结合使用。此外,这个解决方法还没有处理客户端删除cookie的情况。

PHP的默认session超时时间是'0',意味着"直到浏览器关闭"。如果浏览器删除了cookie,那么$_SESSION['timeout']变量将根本没有被设置。然而,我忽略了其他与session管理相关的内容,因为这个问题只涉及超时问题。

0
0 Comments

PHP Session timeout问题的出现原因是当会话过期时,数据不再存在,所以像下面的代码一样,会在会话不再活动时进行重定向:

if (!isset($_SESSION['id'])) {
    header("Location: destination.php");
    exit;
}

您可以使用session.cookie_lifetime来设置会话cookie的有效时间:

ini_set("session.cookie_lifetime","3600"); //一小时

如果您是基于安全考虑而进行会话超时(而不是方便性考虑),请使用被接受的答案,因为下面的评论显示,这是由客户端控制的,因此不安全。我从未将其视为安全措施。

您需要删除$_SESSION['id']周围的引号。

尽管您不是被投票的答案,但您的解决方案似乎更安全。我的问题是,您是否需要在每个页面上设置会话超时?我认为这是有道理的,因为您希望它在每次重启时都重新开始。其次,您是否需要在每个页面上执行session_start才能获取会话数据,还是只需要启动一次即可?谢谢。

会话cookie生存时间存在一些问题,最重要的是,它依赖于客户端来执行。会话cookie的生存时间是为了让客户端清理无用/过期的cookie,它与任何安全相关的事情都没有关系。

我同意Olhovsky的观点。这个回答应该与Jacco的回答结合起来,以获得一个完整的解决方案。Jacco的答案不允许您将会话设置为长于默认值,并且无法处理客户端删除cookie的情况。

我同意Olhovsky的观点。这个回答应该与Jacco的回答结合起来,以获得一个完整的解决方案。Jacco的答案不允许您将会话设置为长于默认值,并且无法处理客户端删除cookie的情况。

"session.cookie_lifetime"指定了客户端/浏览器cookie的生存时间。如果您想设置服务器端的生存时间,请使用"session.gc_maxlifetime"。php.net/manual/en/…

0
0 Comments

PHP Session timeout是指PHP会话超时的问题。当用户在一段时间内没有与服务器交互时,会话会自动超时,导致用户的状态丢失。这个问题的出现主要是因为没有设置会话超时时间或者会话超时时间设置过短。

解决这个问题的方法是在创建会话时设置超时时间,并在用户与服务器交互时重置会话超时时间。下面是一个示例代码,设置会话超时时间为1分钟:

if(!isset($_SESSION["timeout"])){
  $_SESSION['timeout'] = time();
}
$st = $_SESSION['timeout'] + 60; //会话时间为1分钟
if(time() < $st){
  echo '会话将持续1分钟';
}

通过以上代码,首先判断会话是否已经创建,如果没有则创建一个新的会话,并将当前时间赋值给会话超时时间。然后将会话超时时间设定为当前时间加上1分钟。接着,判断当前时间是否小于会话超时时间,如果是,则输出会话将持续1分钟的提示信息。

通过以上方法,可以解决PHP会话超时的问题,保证用户在一定时间内没有与服务器交互时,会话不会自动超时。

0