gpt4 book ai didi

javascript - 当用户在卸载时注销时,他们也会在重新加载时注销

转载 作者:行者123 更新时间:2023-11-28 06:21:49 25 4
gpt4 key购买 nike

我有一个基于登录的网站,我想在用户离开该网站时将其注销(即关闭浏览器或关闭选项卡)。我知道这无论如何都不是万无一失的,但我还是想尽我所能地进行设置。

我正在使用以下代码:

$(window).unload(function() {
//Send an Ajax request to logout.php
$.ajax({
type: "POST",
url: "scripts/logout.php"
})
});

并且 logout.php 只是取消 session 设置。

这在关闭网站时工作正常,但它工作得有点太好了,这意味着当重新加载页面或单击站点内链接时它也会触发。如何防止这种行为,即检查用户的操作是否实际上是关闭浏览器或离开该网站,而不是重新加载或访问另一个网站部分?

最佳答案

我只是想让大家知道我是如何解决这个难题的。

最后,我放弃了 Javascript 中的 unload 函数的想法,转而采用 JS/PHP 组合解决方案。

当用户在网站上时,此 AJAX 每 10 秒触发一次:

$.ajax({
type: "POST",
url: "scripts/resession.php"
});

目标 PHP 更新数据库中用户的 last_active 统计信息:

<?php
session_start();
include('../includes/db.php');

if(isset($_SESSION['isloggedin'])){
$_SESSION['last_active']=time();
mysql_query("update users set last_active='$_SESSION[last_active]' where id='$_SESSION[user_id]' ");
}
?>

在网站上打开仅限用户使用的页面时,我们只需检查用户在过去 20 秒内是否处于事件状态。如果没有,则意味着他们同时离开了该网站,我们将其注销并重定向到登录页面:

if(isset($_SESSION['isloggedin'])){
$result = mysql_query("select last_active from users where id='$_SESSION[user_id]' ");
$lainfo = mysql_fetch_assoc($result);
//if more than 20s of inactivity, that means our user has left the site in the meanwhile and they should be logged out
if($lainfo['last_active'] + 20 < time()){
unset($_SESSION['isloggedin']);
unset($_SESSION['user_id']);
unset($_SESSION['last_active']);
header("location:welcome.php");
exit;
}
}

这并不理想,因为有 10-20 秒的时间他们可以回来并仍然登录 - 但这实际上有其好处,因为可能会出现用户忘记做某事并回来的情况关闭后立即关闭,因此在这种情况下必须再次登录对他们来说会很麻烦。

关于javascript - 当用户在卸载时注销时,他们也会在重新加载时注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35460296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com