将时间存储在DB中并在登录PHP后恢复

时间:2013-09-05 00:29:39

标签: php mysql

我们已经知道PHP中的以下代码会在5分钟不活动后将用户注销。

$timeout = 5*60; // Set timeout minutes
$logout_redirect_url = "index.php"; // Set logout URL

if (isset($_SESSION['start_time'])) {
    $elapsed_time = time() - $_SESSION['start_time'];
    if ($elapsed_time >= $timeout) {
        session_unset();
        session_destroy();
        header("Location: $logout_redirect_url");
    }
}
$_SESSION['start_time'] = time();

我想实现对当前代码的修改,并执行以下操作:

  • 假设用户在自动注销前3分钟后退出(假设在他不活动2分钟后没有重新启动时间),我们通过将其存储在数据库中来跟踪他离开的时间(MySQL)以及稍后在他重新登录后的3分钟内开始减少。我该怎么做?

1 个答案:

答案 0 :(得分:1)

按使用时间跟踪,而不是当前时间/已存储时间。只需用它们来计算剩余的时间。这是一个简单的例子。可能会出现一些小错误和改进。它应该足以帮助您实施解决方案。

用户访问页面:

if (empty($_SESSION['start_time'])) {
  $_SESSION['start-time'] = time();
}

$timeLeft = //get time from db

//if there is a value in the db, that is the time left, otherwise, use the max time allowed (new timer)
$timeLeft = (!empty($timeLeft)) ? $timeLeft : $timeAllowed
$timePassed = time() - $_SESSION['start_time'];
if ($timePassed > $timeAllowed) {
  //logout
}

然后,当用户离开时:

$timeLeft = $timeAllowed - (time() - $_SESSION['start_time']);
//Store $timeLeft in the database - should be a value like 180 (3 minutes)