我在我的项目(在 ASP.NET 2.0 中构建的 Web 应用程序)中遇到了一个严重的问题,如下所述。
假设我已经给出了用户 ID“singh_nirajan”,并且用户说“User1”使用该用户 ID 登录到系统。现在我的要求是每当其他用户假设用户“User2”尝试使用相同的(singh_nirajan)用户ID登录系统时,它将显示一条消息“singh_nirajan已经登录”。
为了实现相同的目的,我只需更新数据库中的一个标志。同样,每当用户正确注销时,我们都会更新数据库中的标志。我们还处理了一些用户无法正确注销的情况,如下所示。
- 单击 (X) 关闭即可关闭浏览器
- 会话超时
- On Error
但不知何故,由于网络故障、电源故障或任何此类原因,用户突然注销。我无法更新数据库中的标志,这就是为什么用户无法使用相同的用户 ID 登录,除非我们手动更新该标志。
上述实施的原因:
有时,用户打开多个浏览器并在不同的浏览器中开始繁重的处理任务,很多时候他们共享他们的用户 ID 和密码,这有时会引发并发问题。为了限制这种情况,我们需要实现单实例登录。
任何人都可以建议我任何其他方法来实现上述目标。
提前致谢。
浏览器本质上是断开连接的系统(无论出于何种意图和目的)。你不能rely在收到有关用户浏览器会话结束的任何通知(来自客户端)时。
亲自(作为用户)我会发现这种单点登录行为很烦人,因为我经常在不同的计算机上访问同一个网站(笔记本电脑、台式机、家庭、工作、虚拟机主机、虚拟机来宾)或者只是同一台计算机上的多个浏览器(特别是浏览器兼容性测试),但我承认这可能是一个要求。
IMO,如果您有“单会话”要求,更好的方法是“最后胜利” - 即,如果您登录第二个会话,您就注定了第一个会话(本质上破坏了他们的令牌) - 所以first会话被注销。那是easy要做的事情(在数据库中,只需在登录时更改 guid 或增加计数器(针对特定用户))。如果需要,您可以记录 IP(或其他)second与您注定失败的会话相对应,但如果第二个会话可以将自己验证为“singh_nirajan”,那么在大多数常见情况下这应该足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)