如何避免在多台机器上使用同一个帐户?

时间:2012-03-04 13:07:14

标签: asp.net session-state application-pool

要求: 用户每个会话期只能登录一次。例如,如果用户从两台不同的机器登录该网站,该网站将显示消息“该帐户已被使用”。如果用户从两个不同的浏览器登录,那将适用。

我正在使用“InProc”会话的Web应用程序。该应用程序执行以下操作:

A- When user login, Put Session_ID, user_ID and IP in a table called Sessions.

B- When Session_End is called, Set the row of Sessions table to be marked InActive.

C- When Application_Start is called, the web app deactivate all Sessions.

首先:我不喜欢这样,它会导致数据库死锁。我还无法验证原因。

第二:session_end是否保证在所有情况下运行,我找不到MSDN页面说当回收App池时调用Session_End。见http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx

你有更好的主意吗? Session_End是否被称为每次应用程序池是否被回收?

由于

1 个答案:

答案 0 :(得分:1)

我认为你所拥有的在概念上是正确的,但是我不认为你可以依赖session_end事件触发,因为这只会在用户在会话过期时点击你的网站时发生,而不是仅仅关闭浏览器

您可能还需要一个定期运行的服务,并在经过一段时间后从会话表中删除项目(您可能需要在创建/刷新会话时更新的日期字段)。

不知道你死锁的来源,但我猜你没有正确关闭......