将ASP.NET用户会话限制为单个活动会话的最佳做法是什么?

时间:2011-12-07 16:06:44

标签: asp.net session asp.net-membership

我有一个要求,即登录用户在ASP.NET应用程序中一次只能有1个活动会话。目前,单个用户可以同时从多台计算机登录并获得多个会话。我使用AppFabric的标准ASP.NET成员资格进行会话状态管理。我是否遗漏了ASP.NET成员资格中的一些基本开关来强制执行此操作?否则,计划是向成员资格数据库添加一个表,该数据库将具有aspnet_Users.UserId和sessionId列,并且只需确保当前会话Id(last-in)是唯一允许的会话。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您可以像在用户表中保存上次登录时间一样。在登录时将相同的信息保存在用户的会话状态中。

检查时间是否与每个页面请求匹配。如果比较时服务器在用户表中有更新的时间,则表示您不再处于该用户的最新会话中,并且可以通过重定向到注销来终止当前会话,或者通过重新定位当前会话来终止当前会话会话。

从技术上讲,这可以通过会话的任何唯一可识别信息来完成,例如GUID,甚至是会话ID本身,但我喜欢时间,因为它还提供了一些你可以衡量的东西,并找出,“当前会议的年龄?”

但是......我通常希望看到网络应用按照预期的方式运行,这是用户ID维护会话的地方,而不是连接本身。当网站发布时,用户会变得非常愤怒。如果您需要这样做,请确保有充分的理由......例如订阅服务(可能是流媒体),其中只有一个设备可以一次访问或类似的东西。

答案 1 :(得分:-1)

最佳做法是不将用户会话限制为单个活动会话。

用户对此的体验是“烦人的网站再次让我失望”。

将用户的状态与用户关联,而不是与会话关联。