我有下面的脚本。当我们关闭窗口时,用户注销正在运行,但在数据库中状态没有改变。我的意思是状态1显示用户在线,状态0显示离线,但当用户通过窗口关闭注销时状态没有改变。
如果我们点击“注销”按钮,则会在状态发生变化。
if($_SESSION['username'] != "admin")
{
$timeout = 1;
$logout_redirect_url = "logout.php";
$timeout = $timeout * 60;
if(isset($_SESSION['start_time']))
{
$elapsed_time = time() - $_SESSION['start_time'];
if ($elapsed_time >= $timeout)
{
$db->query($strQuery1);
header("Location: $logout_redirect_url");
}
}
$_SESSION['start_time'] = time();
}
答案 0 :(得分:0)
我不知道这是不是更好的方式 如果要动态了解用户当前是否在您的网站上,可以在数据库中设置最后一次连接的值(保存日期时间值)。当用户重新加载新页面时,此值“最后连接”将被重置,可能是在您应用测试以查看他当前是否已记录时。
之后,您创建一个读取值“last connect”的cron,您可以知道用户是否超时。
答案 1 :(得分:0)
您可以做的是添加一个javascript window.onBeforeUnload
事件,触发ajax调用并更新您的查询。
但它不安全,因为它是唯一的客户端,但它值得一试。
另一种方法是检查会话时间,如果会话未在所需的超时中刷新,则手动注销用户。
PS:您还应该查看this手册,这将有所帮助。