【问题标题】:Logout user after a specific time of inactivity在特定时间不活动后注销用户
【发布时间】:2017-11-28 07:37:03
【问题描述】:

我正在创建一个包含 10 多个不同 php 文件的网站。我想从登录页面开始检查用户是否处于非活动状态。因此,如果用户登录并在特定时间段内保持空闲状态,则必须将该用户注销。我是 PHP 新手,目前正在使用类似问题的答案

if (isset($_SESSION["LAST_ACTIVITY"])) {
   if (time() - $_SESSION["LAST_ACTIVITY"] > 1800)) {
      // last request was more than 30 minutes ago
      session_unset();     // unset $_SESSION variable for the run-time 
      session_destroy();   // destroy session data in storage
   } else if (time() - $_SESSION["LAST_ACTIVITY"] > 60) {
       $_SESSION["LAST_ACTIVITY"] = time(); // update last activity time stamp
    }
}

我在这里找到了答案:

expire session when there is no activity in PHP

我创建了一个名为 session.php 的单独页面并将代码粘贴到上面的链接中。然后我在我的登录页面中包含了文件 session.php(它检查输入的凭据并登录用户)。问题是,if 循环没有运行,我不知道如何定义 $_SESSION['LAST_ACTIVITY'] 变量。我在登录页面中使用了以下内容:

$query = "SELECT * 
          FROM user_details 
          WHERE username = '$username' 
          AND password = '$password'";

  $result = mysqli_query($dbconnect, $query);
  $row = mysqli_fetch_array($result);

  $count = mysqli_num_rows($result);

  if ($count == 1) {
     session_start();
     echo "Welcome    " .$username. "</br>";
     $_SESSION['username'] = $username;
     $login_time = time();
     $_SESSION["LAST_ACTIVITY"] = $login_time   ;
     include('session.php');

我也尝试在文件开头包含 session.php 但没有用。问题是:time() - $_SESSION["LAST_ACTIVITY"] 等于 0。如何存储上次活动时间并将其与当前时间进行比较?另外,我应该在网站的每个其他网页文件中包含 session.php 以检查用户活动吗?如果是,我应该把它放在开头还是结尾?

【问题讨论】:

    标签: php session


    【解决方案1】:

    此代码将解决您的会话超时问题。

    <?php
    // set timeout period in seconds
    $inactive = 60; //after 60 seconds the user gets logged out
    // check to see if $_SESSION['timeout'] is set
    if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
        { 
            session_destroy(); 
            header("Location: Logout.php"); 
        }
    }
    $_SESSION['timeout'] = time();
    

    ?>

    【讨论】:

    • 如何初始化 $_SESSION['timeout'] 的值?这段代码在哪里获取 $_SESSION['timeout'] 的值来评估第一个 if 循环?
    • $_SESSION['timeout'] = time();这将初始化 $_SESSION['timeout'] 的值。我在循环结束后写了这一行。
    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 2014-10-25
    • 2015-10-18
    • 2013-09-23
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    相关资源
    最近更新 更多