嗨我需要为同一个用户关闭以前的会话。如果用户登录计算机A然后登录B,则必须关闭A的会话。 我甚至没有任何想法这样做:( 非常感谢。
答案 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
当用户登录时,您必须:
当用户注销时,您只需从UserSession
表中删除记录。
您的身份验证可能有自定义IHttpModule
。此特定模块应检查当前会话是否存在记录。如果没有,它应该注销用户并重定向到一个页面,上面写着你已经在其他地方登录。
表评论:每个用户都可以在表中拥有多个会话,因为他们可能会断开连接,或者他们可能只是在退出之前关闭浏览器。因此,这两个领域都是主键。