我正在尝试实现一个MySQL表,其中包含当前登录的用户列表。这是我当前实现此目的的逻辑和代码。
登录时执行以下代码:
//Add the user_id to the logged_in table
$loggedInQry = mysqli_query($dbc, "INSERT INTO logged_in (user_id) VALUES ('$userId')");
单击“注销”按钮后,执行以下代码:
//Remove user from logged_in table.
$userId = $_SESSION['userId'];
$logoutQry = mysqli_query($dbc, "DELETE FROM logged_in WHERE user_id = '$userId'");
//Clear all of the saved session variables.
session_destroy();
我目前面临的问题是,如果会话在默认的24分钟后超时,则由于取消设置$_SESSION['userId']
变量,用户会自动注销,但是user_id不会被删除来自logged_in表。
有没有办法可以在$_SESSION
超时执行某个功能?理想情况下,我希望在会话超时时从logged_in表中删除当前$_SESSION['userId']
,因为它当前保留在logged_in表中。
答案 0 :(得分:0)
您需要实现自己的会话超时机制,以便在超时时执行相同的删除查询。
这将使您朝着正确的方向前进:https://solutionfactor.net/blog/2014/02/08/implementing-session-timeout-with-php/
答案 1 :(得分:0)
自动过期会话
<?php
session_start();
$idletime=30;//after 60 seconds the user gets logged out
if (time()-$_SESSION['timestamp']>$idletime){
session_destroy();
}else{
$_SESSION['timestamp']=time();
}
$_SESSION['timestamp']=time();