用户关闭浏览器时将状态更改为0

时间:2016-12-26 14:41:34

标签: php jquery session

我正在尝试构建一个简单的系统来指示用户是否在线的天气。但我有一个问题

当用户关闭水龙头或浏览器时,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?

3 个答案:

答案 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]

请记住在桌面上创建正确的索引,考虑到您将经常运行上述查询。