我正致力于实施"存在"基于经典asp(vbscript),SQL Server,javascript,IIS7堆栈构建的网站上的功能。
现有的身份验证/登录系统使用会话,默认的20分钟会话超时。用户数据存储在SQL Server表中。用户登录时也会设置cookie,即使未登录也可以跟踪注册用户。
USERS表中有一列保存状态,例如"网"或"离线"。以下是我迄今为止提出的逻辑:
状态设置为" online"时间:
状态设置为"离线"当:
问题:
由于
答案 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秒,您将很快知道用户是否消失。