【问题标题】:change status to 0 when user close browser当用户关闭浏览器时将状态更改为 0
【发布时间】:2016-12-26 14:41:34
【问题描述】:

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

当用户关闭水龙头或浏览器时,ajax 代码无法刷新处理用户跟踪活动的页面。

如果用户 2 分钟不活动,我的 php 代码将值更改为 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);
}

jquery 代码每 5 秒检查一次

$(document).ready(function () {
/*check existing users*/
function session_checking() {
    $.post("../ajax-session.php", function (data) {

    });
}
setInterval(session_checking, 5000);
});

如果用户关闭浏览器,如何将状态更改为 0?

【问题讨论】:

    标签: php jquery session


    【解决方案1】:

    据我所知,当用户关闭选项卡/窗口时,无法通知服务器。

    也许您可以创建一个任务来不断检查您的用户的活动,让他们停用:

    UPDATE users SET is_online = 0 WHERE is_online = 1 AND last_activity <= [WHAT YOU NEED]
    

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

    【讨论】:

    • 谢谢你,我会试试你的想法,它可能会像我想要的那样工作
    • 当然,如果您对我的帮助感到感激,请不要忘记为我的答案投票:)
    【解决方案2】:

    为此使用 setcookie

    setcookie('newtest', 'newtest', 0);
    

    【讨论】:

    • 但是当用户关闭浏览器时,ajax 代码将不起作用,因此无法访问 if 语句 t '(isset($_SESSION['LAST_ACTIVITY']) && (time( ) - $_SESSION['LAST_ACTIVITY'] > 61)) 你能详细说明它是如何工作的吗?
    • 如果用户在 3 分钟内没有进行任何活动,您应该每分钟运行一次 cron 文件,那么您必须取消设置所有会话
    【解决方案3】:

    只需在登录过程中设置一个包含会话数据的变量。因此,您可以稍后检查用户是否处于活动状态。喜欢:

    $_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"])){ ... }
    

    【讨论】:

    • 因此,如果他关闭浏览器 5 小时,他将保持活动状态,直到他回来!我认为这不是有效的解决方案。最好跟踪用户在网站上花费了多少,但不知道他是否在线
    • 浏览器关闭时会话将结束。
    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2020-11-23
    • 2020-10-23
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多