【发布时间】:2010-12-01 16:30:09
【问题描述】:
您好,我需要关闭同一用户的上一个会话。如果用户在计算机 A 上登录,然后在 B 上登录,我必须关闭 A 的会话。 我什至没有任何想法去做:( 非常感谢。
【问题讨论】:
标签: asp.net asp.net-mvc session
您好,我需要关闭同一用户的上一个会话。如果用户在计算机 A 上登录,然后在 B 上登录,我必须关闭 A 的会话。 我什至没有任何想法去做:( 非常感谢。
【问题讨论】:
标签: asp.net asp.net-mvc session
开始一个新的会话
Session.Abandon();
根据您的应用程序的内部工作原理,还可以注销您的用户。如果您将登录用户存储在 Session 中,这当然是不需要的。无论如何,它会在第一次调用时被放弃。
如果您需要访问同一用户的其他会话,那么您将不得不求助于 InProc 之外的其他会话状态模式。在您的情况下,数据库状态模式可以解决问题。检查此MSDN resource。
您必须创建一个单独的表,例如:
create table UserSession
(
UserID int not null
references dbo.User(UserID),
SessionID varchar(100) not null,
primary key (UserID, SessionID)
)
go
当用户登录时,您必须:
当用户注销时,您只需从UserSession 表中删除记录。
您可能有一个自定义的IHttpModule 用于您的身份验证。此特定模块应检查当前会话是否存在记录。如果没有,它应该注销用户并重定向到一个页面,上面写着你已经在其他地方登录了。
表格评论:每个用户都可以在表格中拥有多个会话,因为他们可能会断开连接,或者他们可能会在退出前关闭浏览器。因此两个字段的主键。
【讨论】: