在一定时间后杀死会话并更新数据库

时间:2015-09-29 21:28:39

标签: php session

如果用户不在网页上,我写了以下php代码以在10秒后销毁会话,但它无法正常运行。它会在10秒后正确杀死会话,但它不会更新数据库。要更新数据库,我必须刷新浏览器上的index.php页面,然后更新数据库。我希望如果我关闭浏览器或处于非活动状态,会话将在启动10秒后自动销毁,并且无论我是否在浏览器上都会更新数据库。我不想让更新的东西更新数据库。

$inactive = 10;

// check to see if $_SESSION["timeout"] is set
if (isset($_SESSION["timeout"])) {
    // calculate the session's "time to live"
    $sessionTTL = time() - $_SESSION["timeout"];
    if ($sessionTTL > $inactive) {

        $new_status= 0; 

        $checkbox = "UPDATE online SET status=($new_status) WHERE id=1 ";
        $stmt = $conn->prepare($checkbox);
        // Now we execute the query passing an array toe execute();
        $results = $stmt->execute(array($new_status));
        // Extract the values from $result
                $error = $stmt->errorInfo();
        header("Location:logout.php");
       unset($_SESSION['username1']);
    }
}

1 个答案:

答案 0 :(得分:0)

这是不可能的。会话绑定到单个用户,如果用户变为非活动状态,则他不会打开任何php脚本,这可能会导致绑定到其会话的操作。

如果要检测不活动,则必须将最后一个操作的时间戳存储在数据库中,并将此值与当前时间进行比较。

UPDATE user SET status=0 WHERE UNIX_TIMESTAMP() - last_action > 10;

并设置不活动字段,您可以使用此

{ 
  status: 200,
  success: true,
  result: 
   [ { Dribbble: 'a',
       Behance: '',
       Blog: 'http://blog.invisionapp.com/reimagine-web-design-process/',
       Youtube: '',
       Vimeo: '' },
     { Dribbble: '',
       Behance: '',
       Blog: 'http://creative.mailchimp.com/paint-drips/?_ga=1.32574201.612462484.1431430487',
       Youtube: '',
       Vimeo: '' } ] 
}