【问题标题】:asp.net mvc close previous session for same userasp.net mvc 关闭同一用户的上一个会话
【发布时间】:2010-12-01 16:30:09
【问题描述】:

您好,我需要关闭同一用户的上一个会话。如果用户在计算机 A 上登录,然后在 B 上登录,我必须关闭 A 的会话。 我什至没有任何想法去做:( 非常感谢。

【问题讨论】:

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


    【解决方案1】:

    开始一个新的会话

    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
    

    当用户登录时,您必须:

    1. 更新 UserSession 表并删除现有用户会话。
    2. 添加当前会话。

    当用户注销时,您只需从UserSession 表中删除记录。

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

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

    【讨论】:

    • 但是我可以访问之前的会话吗?我不明白,对不起
    • @Sanja Melnichuk:如果应用程序 A 检测到用户已在其他地方登录,则必须在应用程序 A 中执行此操作。如果您想访问各种会话,则必须求助于其他会话状态管理(例如 DB 会话)。您可以使用数据库手动访问其他用户会话。
    • 您的意思是将一些 uuid 存储到数据库,然后为用户获取它并关闭与该 uuid 关联的会话?谢谢
    • @Sanja Melnichuk:检查我的编辑。
    • @RobertKoritnik ,我是新来的会话。我有同样的要求,如何使用该表清除用户以前的会话,我们可以清除会话 ID 的会话
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多