【问题标题】:Check if user is offline检查用户是否离线
【发布时间】:2011-04-12 11:03:08
【问题描述】:

我有一个在线游戏。我想显示有多少用户在线。问题是要知道用户何时离线。 有没有办法检查会话 cookie 以确认与浏览器的会话是否已关闭? 我正在考虑简单地在服务器上设置一个超时,该服务器启动一个脚本来计算存在多少会话 cookie,但是我如何检查会话 cookie 是否与登录的人有关,而不仅仅是访问者?

你是怎么处理的?

1) 我不想依赖使用注销按钮触发的脚本,因为从来没有人注销...人们只是关闭浏览器。

2) 关于时间戳和注册活动?由于在我的游戏中,用户与 svg 进行交互(而不是在页面中移动),因此他们会产生大量点击。为每次点击进行查询以刷新记录将非常昂贵。

【问题讨论】:

    标签: php


    【解决方案1】:

    当用户与网站交互时,设置他们的最后活动时间。

    如果超过 30 分钟左右,您可以假设他们处于离线状态。

    您还可以在某人单击注销时明确将其设置为离线。

    但是,您的情况有些不同。您可以使用 heartbeat 样式的脚本。

    当他们在页面上时,使用setInterval() 将到期日期延长至最大范围(以防用户将浏览器窗口连续打开数小时)。

    【讨论】:

    • 感谢您的回复,但正如我所说:我有一个基于 svg 板的在线游戏。用户可以关闭主页,然后在 svg 页面上玩……但他们在每场游戏中的 2 分钟内点击了 50 次左右。为每次点击更新数据库对我来说非常昂贵。
    • 这是一种“keepAlive”,不管用户没有活动,他仍然在线
    • @hysoka44 我没有说每次点击都更新数据库,我说要使用一个间隔来phone home,这将延长到期日期。当然,这永远不会是 100% 准确的,但它应该足够接近而无需进行任何权衡。
    • 有趣。我可以设置一个间隔来调用一个只有 session_cache_expire(something) 的 php 脚本,所以会话将被延长。你是这个意思吗?但是我到底如何检查服务器上存在多少日志会话呢?
    • @hysoka44 做类似(假设是 MySQL)SELECT COUNT(`id`) FROM `users` WHERE `expiry` > NOW().
    【解决方案2】:

    由于您的代码在页面加载时执行,因此您无法检查用户是否关闭了浏览器。

    因此,常见的方法是使用时间戳并在用户在您的网站上执行某些操作并且如果时间戳早于 5 分钟时更新此标记,您只需假设他离线

    【讨论】:

    • 是的,我知道。但是...由于在我的游戏中,用户与 svg 交互(不是在页面中移动),因此他们会产生大量点击(每次点击一次)。为每次点击进行查询以刷新记录将非常昂贵。
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2012-04-04
    • 2020-07-13
    相关资源
    最近更新 更多