【问题标题】:Implementing Presence - When to Change Status to Offline实施状态 - 何时将状态更改为离线
【发布时间】:2015-12-21 15:20:34
【问题描述】:

我正在致力于在基于经典 asp (vbscript)、SQL Server、javascript、IIS7 堆栈的网站上实现“存在”功能。

现有的身份验证/登录系统使用会话,默认会话超时为 20 分钟。用户数据存储在 SQL Server 表中。用户登录时还会设置一个 cookie,即使未登录也可以跟踪注册用户。

USERS 表中有一个列保存状态,例如“在线”或“离线”。以下是我迄今为止提出的逻辑:

状态设置为“在线”时:

  1. 用户登录
  2. 检测到 cookie,例如用户返回但尚未登录

状态设置为“离线”时:

  1. 用户退出
  2. 用户关闭浏览器(使用 javascript 事件检测)
  3. 用户离开网站(尚不确定如何最好地检测到这一点)
  4. 用户会话过期(在 global.asa 的 Session_OnEnd 子例程中处理)

问题:

  1. 我是否忽略了上述逻辑中的任何内容?
  2. 在“何时将状态设置为‘离线’”列表中检测上述项目 2 和 3 的最佳方法是什么(在 js/经典 asp 中)

谢谢

【问题讨论】:

  • 恕我直言,处理 2 和 3 的最佳方法是让客户端每 x 秒发送一次 ping,更新 DB 中的上次访问时间,然后在服务器端有一个注销功能,用于查找非- 在 x 时间内访问,并更新标志。
  • @Gary - 如果我有误解,请纠正我,但这些自动 ping 不会让人觉得好像没有来自客户端的活动吗?
  • 取决于您要检测的内容,如果他们的客户端浏览器打开并且他们在网站上,他们是否被归类为在线?
  • @lankymart - 我明白你在说什么 - 我想我认为自动 ping 解决方案可以使会话永久保持活动状态,这不是我想要做的
  • ping 是您 100% 确定用户仍然存在的唯一方法。想想用户刚刚关闭机器的例子。在 20 分钟超时到期之前,您不会知道它们已经消失。如果您将 ping 设置为 60 秒,您将很快知道用户消失了。

标签: javascript session vbscript asp-classic


【解决方案1】:

对于 2 和 3,当 js 检测到可能离开页面时,你可以做什么有 js 限制。我认为您所能做的就是在他们离开之前显示一条消息。这意味着您将无法在他们离开时运行任何 js。

Best way to detect when a user leaves a web page?

正如 Gary 所说,最有效的方法可能是使用一些 ajax 来 ping 服务器上的脚本以更新数据库中的 LastTimeOnline 字段。

另一种方法是使用 Session_OnEnd 但这可能会给出错误的数字,因为用户可能在线 5 秒,这将触发 20 分钟的会话。

最好真的做 ping。

您那里的所有其他逻辑似乎都很好。

刚刚发现您的其他评论。是的,如果有人在页面上打开他们的浏览器,那么这可能会整天都在ping。但是随后他们可能会在线,因此您别无选择,只能假设会话确实处于活动状态。您总是可以添加一些 js 来检测点击和滚动以确定活动。

【讨论】:

  • 这个 - 你总是可以添加一些 js 来检测点击和滚动以确定活动。
  • Session_OnEnd 的另一个问题是应用程序池回收设置可能会给出错误结果,具体取决于应用程序池的配置方式,几乎使 Session.Timeout 毫无意义。
【解决方案2】:

恕我直言,处理 2 和 3 的最佳方法是让客户端每 x 秒发送一次 ping,更新 DB 中的最后访问时间,然后在服务器端有一个注销功能,用于查找 x 内的非访问时间,并更新标志。

这些自动 ping 将使客户端看起来好像有活动,而实际上可能没有,并且在这种情况下添加一些捕获鼠标和键盘活动的事件。如果它们停止一段时间,请停止发送 ping。活动恢复时重新启动 ping。

ping 是您 100% 确定用户仍然存在的唯一方法。想想用户刚刚关闭机器的例子。在 20 分钟超时到期之前,您不会知道它们已经消失。如果您将 ping 设置为 60 秒,您将很快知道用户消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2016-09-15
    • 2018-03-13
    • 2018-10-20
    相关资源
    最近更新 更多