我正在尝试构建一个简单的系统来指示用户是否在线的天气。但我有一个问题
当用户关闭水龙头或浏览器时,ajax代码无法刷新处理用户跟踪活动的页面。
我的php代码,如果用户处于非活动状态2分钟,则将值更改为0
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 61)) {
$query = "UPDATE [ccc].[users] SET active = 0 WHERE ldap ='$ldap'";
sqlsrv_query($conn,$query);
}
每隔5秒检查一次jquery代码
$(document).ready(function () {
/*check existing users*/
function session_checking() {
$.post("../ajax-session.php", function (data) {
});
}
setInterval(session_checking, 5000);
});
如果用户关闭浏览器,如何将状态更改为0?
答案 0 :(得分:0)
使用setcookie
setcookie('newtest', 'newtest', 0);
答案 1 :(得分:0)
只需设置一个在登录过程中具有会话数据的变量。因此,您可以稍后检查用户是否处于活动状态。像:
$_SESSION["user"] = array(
"s_name" => "user1@email.com",
"login_time" => time()
);
if($_SESSION["user"]["login_time"] < time()+2*60){ unset($_SESSION["user"]); }
in application:
if(isset($_SESSION["user"])){ ... }
答案 2 :(得分:0)
据我所知,当用户关闭标签/窗口时,无法通知服务器。
也许您可以创建一个不断检查用户活动的任务,并将其停用:
UPDATE users SET is_online = 0 WHERE is_online = 1 AND last_activity <= [WHAT YOU NEED]
请记住在桌面上创建正确的索引,考虑到您将经常运行上述查询。