【问题标题】:Access Membership User On Session End在会话结束时访问会员用户
【发布时间】:2013-11-20 21:15:39
【问题描述】:

我目前正在尝试编写一些代码来在用户放弃会话(通过超时或注销)后进行一些整理,但是我想访问 User 对象,以便我知道会话属于谁到。

不幸的是 HttpContext 为空,所以我无法直接访问 HttpContext.User 或 HttpContext.User.IsInRole 甚至 auth cookie。我了解这背后的原因,但想知道在会话超时时是否有其他方法可以访问此信息?

这与在会话中复制一些信息的明显答案不同。

谢谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-membership session-state membership-provider httpcontext


    【解决方案1】:

    您可以使用 Global.asaxSession_End 事件。 Session 过期时会自动调用 Session_End 事件。

    问题是在没有当前请求的情况下调用 Session_End 事件。结果,HttpContext.Current 在 Session_End 内为空。

    如果您想获取用户信息,您需要在用户成功登录后立即将其保存在 Session 中。

    private void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set 
        // to StateServer or SQLServer, the event is not raised.
    
        var userName = Session["UserName"];
        var sessionId = Session.SessionID;
    }
    

    【讨论】:

    • 我也这么想,重复有点烦人,但我猜不是世界末日。
    【解决方案2】:

    没有任何东西可以将会员用户与会话联系起来。

    当用户手动注销时,在您清除他们的会话之前,您可以获取他们的用户信息。

    但是,如果用户让浏览器保持打开状态并且服务器上的会话超时,您将不知道该用户是谁,因此无法为他们整理。

    在服务器上,您可能需要跟踪用户上次交互的时间,然后运行作业以整理一段时间未交互并被视为已注销的用户。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多