asp.net mvc关闭同一用户的上一个会话

时间:2010-12-01 07:53:53

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

嗨我需要为同一个用户关闭以前的会话。如果用户登录计算机A然后登录B,则必须关闭A的会话。 我甚至没有任何想法这样做:( 非常感谢。

1 个答案:

答案 0 :(得分:1)

开始新会话

Session.Abandon();

根据应用程序的内部工作原理,还会注销您的用户。如果您在Session中存储登录用户,则当然不需要这样做。无论如何,它会在第一次通话时被放弃。

修改

如果您需要访问同一用户的其他会话,则必须使用其他会话状态模式而不是InProc。在您的情况下,DB状态模式可以解决问题。请查看此MSDN resource

您必须创建一个单独的表,如:

create table UserSession
(
    UserID int not null
        references dbo.User(UserID),
    SessionID varchar(100) not null,
    primary key (UserID, SessionID)
)
go

当用户登录时,您必须:

  1. 更新UserSession表格并删除现有用户会话。
  2. 添加当前会话。
  3. 当用户注销时,您只需从UserSession表中删除记录。

    您的身份验证可能有自定义IHttpModule。此特定模块应检查当前会话是否存在记录。如果没有,它应该注销用户并重定向到一个页面,上面写着你已经在其他地方登录

      

    表评论:每个用户都可以在表中拥有多个会话,因为他们可能会断开连接,或者他们可能只是在退出之前关闭浏览器。因此,这两个领域都是主键。