【发布时间】:2017-04-04 22:19:07
【问题描述】:
我正在尝试实现一个 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 不会从登录表。
有没有一种方法可以在$_SESSION 超时时执行函数?理想情况下,我想在 Session 超时时从 logged_in 表中删除当前的 $_SESSION['userId'],因为它当前保留在 logged_in 表中。
【问题讨论】:
-
为什么不给会话一个生命周期,只在用户请求时才终止它?
-
验证注销请求是来自用户的有效请求也很重要。