Asp.net mvc 在会话结束时访问成员资格用户

Asp.net mvc 在会话结束时访问成员资格用户,asp.net-mvc,asp.net-membership,session-state,membership-provider,httpcontext,Asp.net Mvc,Asp.net Membership,Session State,Membership Provider,Httpcontext,我目前正在尝试编写一些代码,以便在用户放弃会话(通过超时或注销)后进行一些整理,但是我希望访问用户对象,以便知道会话属于谁 不幸的是,HttpContext为null,因此我无法直接访问HttpContext.User或HttpContext.User.IsInRole,甚至无法访问验证cookie。我理解这背后的原因,但不知道在会话超时时是否有其他方法可以访问此信息 这与在会议中重复一些信息的明显答案不同 谢谢。会员用户与会话之间没有任何关联 当用户手动注销时,在您清除其会话之前,您可以获取其

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

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

这与在会议中重复一些信息的明显答案不同


谢谢。

会员用户与会话之间没有任何关联

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

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


在服务器上,您可能需要跟踪用户最后一次交互的时间,然后运行作业来清理有一段时间没有交互且被认为已注销的用户。

您可以使用Global.asax会话结束事件。会话过期时,将自动调用会话结束事件

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

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


我也这么想,有点讨厌复制品,但我猜不是世界末日。
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;
}