【发布时间】:2015-12-21 15:20:34
【问题描述】:
我正在致力于在基于经典 asp (vbscript)、SQL Server、javascript、IIS7 堆栈的网站上实现“存在”功能。
现有的身份验证/登录系统使用会话,默认会话超时为 20 分钟。用户数据存储在 SQL Server 表中。用户登录时还会设置一个 cookie,即使未登录也可以跟踪注册用户。
USERS 表中有一个列保存状态,例如“在线”或“离线”。以下是我迄今为止提出的逻辑:
状态设置为“在线”时:
- 用户登录
- 检测到 cookie,例如用户返回但尚未登录
状态设置为“离线”时:
- 用户退出
- 用户关闭浏览器(使用 javascript 事件检测)
- 用户离开网站(尚不确定如何最好地检测到这一点)
- 用户会话过期(在 global.asa 的 Session_OnEnd 子例程中处理)
问题:
- 我是否忽略了上述逻辑中的任何内容?
- 在“何时将状态设置为‘离线’”列表中检测上述项目 2 和 3 的最佳方法是什么(在 js/经典 asp 中)
谢谢
【问题讨论】:
-
恕我直言,处理 2 和 3 的最佳方法是让客户端每 x 秒发送一次 ping,更新 DB 中的上次访问时间,然后在服务器端有一个注销功能,用于查找非- 在 x 时间内访问,并更新标志。
-
@Gary - 如果我有误解,请纠正我,但这些自动 ping 不会让人觉得好像没有来自客户端的活动吗?
-
取决于您要检测的内容,如果他们的客户端浏览器打开并且他们在网站上,他们是否被归类为在线?
-
@lankymart - 我明白你在说什么 - 我想我认为自动 ping 解决方案可以使会话永久保持活动状态,这不是我想要做的
-
ping 是您 100% 确定用户仍然存在的唯一方法。想想用户刚刚关闭机器的例子。在 20 分钟超时到期之前,您不会知道它们已经消失。如果您将 ping 设置为 60 秒,您将很快知道用户消失了。
标签: javascript session vbscript asp-classic