会话结束时访问会员用户

时间:2013-11-20 21:15:40

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

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

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

除了重复会话中的一些信息的明显答案之外。

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

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;
}

enter image description here

答案 1 :(得分:0)

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

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

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

在服务器上,您可能需要跟踪用户上次交互的时间,然后运行作业以整理那些暂时没有交互且被视为已注销的用户。