【问题标题】:session timeout due to inactivity [duplicate]由于不活动而导致会话超时[重复]
【发布时间】:2013-03-13 19:39:24
【问题描述】:

我创建了一个脚本login.php,并在那里创建了一个名为logged_in的会话变量

$_SESSION['logged_in'] = true;

在会话由于不活动而到期后,我无法找到一种方法来重定向以重定向到我的 logout.php。我还应该放置使该会话变量过期的代码。我已经用谷歌搜索了这个错误,它建议在大多数文章中调整php.ini 文件。但是我看到一篇文章说这不是最佳实践。

我在 StackOverflow 上找到了以下代码,但我不知道放在哪里:-

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>

我想知道在会话过期后重定向的最佳方式以及代码放置位置的建议。

编辑:我忘了提到我想知道如何手动设置会话到期的时间。

提前谢谢你

【问题讨论】:

    标签: php


    【解决方案1】:

    实现这个想法:

    $expire_time = 3*60*60; //expire time
    if( $_SESSION['last_activity'] < time()-$expire_time ) {
        echo 'session expired';
        die();
    }
    else {
        $_SESSION['last_activity'] = time(); // you have to add this line when logged in also;
        echo 'you are uptodate';
    }
    

    【讨论】:

      【解决方案2】:

      如果您想在用户长时间不活动时尝试加载页面时注销用户,您应该将此代码放在每个 php 文件的顶部(在任何其他 html 标记之前):

      if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) { //have we expired?
          //redirect to logout.php
          header('Location: http://yoursite.com/logout.php'); //change yoursite.com to the name of you site!!
      } else{ //if we haven't expired:
          $_SESSION['last_activity'] = time(); //this was the moment of last activity.
      }
      

      另外,在您成功登录后,将此代码放在您登陆的页面顶部:

      $_SESSION['logged_in'] = true; //set you've logged in
      $_SESSION['last_activity'] = time(); //your last activity was now, having logged in.
      $_SESSION['expire_time'] = 3*60*60; //expire time in seconds: three hours (you must change this)
      

      在该页面上,您不必包含我首先给您的检查代码。

      对了,别忘了正确添加&lt;?php标签!

      【讨论】:

      • 所有页面都应该包含session_start吗?
      • @surfine session_start 到底是什么意思?代码$_SESSION['logged_in'] = true;?您应该将其放在登录登录页面上。我已经编辑了我的答案。
      • 这对我有用,但是我登录后转到的页面是我的应用程序主页,如果您在不是主页的页面上等待计时器/会话到期,然后单击指向主页的链接,会话将继续。当会话过期时,如何让链接返回主页?同时注销用户?
      • 忽略上述评论。我想到了。我需要做的就是让我的登录页面链接到一个重定向页面,该页面有你的第二个代码块并重定向到主页。然后我只需要在主页上实现你的第一个代码块。谢谢
      • @AlMar89 太好了,你解决了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多