实施状态 - 何时将状态更改为离线

时间:2015-12-21 15:20:34

标签: javascript session vbscript asp-classic

我正致力于实施"存在"基于经典asp(vbscript),SQL Server,javascript,IIS7堆栈构建的网站上的功能。

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

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

状态设置为" online"时间:

  1. 用户登录
  2. 检测到例如cookie用户返回但尚未登录
  3. 状态设置为"离线"当:

    1. 用户注销
    2. 用户关闭浏览器(使用javascript事件进行检测)
    3. 用户导航离开网站(不确定如何最好地检测到这一点)
    4. 用户会话到期(在global.asa&#39的Session_OnEnd子例程中处理)
    5. 问题:

      1. 我是否忽略了上述逻辑中的任何内容?
      2. 在"当将状态设置为'离线'"时,检测上面第2项和第3项的最佳方式(在js / classic asp中)是什么?列表
      3. 由于

2 个答案:

答案 0 :(得分:2)

对于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来检测点击和滚动以确定活动。

答案 1 :(得分:2)

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

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

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