Asp.net mvc 在会话结束时访问成员资格用户
我目前正在尝试编写一些代码,以便在用户放弃会话(通过超时或注销)后进行一些整理,但是我希望访问用户对象,以便知道会话属于谁 不幸的是,HttpContext为null,因此我无法直接访问HttpContext.User或HttpContext.User.IsInRole,甚至无法访问验证cookie。我理解这背后的原因,但不知道在会话超时时是否有其他方法可以访问此信息 这与在会议中重复一些信息的明显答案不同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。我理解这背后的原因,但不知道在会话超时时是否有其他方法可以访问此信息 这与在会议中重复一些信息的明显答案不同 谢谢。会员用户与会话之间没有任何关联 当用户手动注销时,在您清除其会话之前,您可以获取其
谢谢。会员用户与会话之间没有任何关联 当用户手动注销时,在您清除其会话之前,您可以获取其用户信息 但是,如果用户打开浏览器,并且会话在服务器上超时,您将不知道该用户是谁,因此无法为他们整理
在服务器上,您可能需要跟踪用户最后一次交互的时间,然后运行作业来清理有一段时间没有交互且被认为已注销的用户。您可以使用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;
}