ASP.Net会话超时检测:Session.IsNewSession和SessionCookie检测
当我的ASP.Net会话超时(并形成身份验证)并尝试点击页面时,我会自动重定向到我的默认login.aspx页面.
在页面加载之前,我需要确定这是否是超时情况,如果是 – 重定向到timeout.aspx. 下面的文章指定如果IsNewSession为true,并且存在sessionID cookie – 那么您有超时情况. 然而,在我的测试中,我遇到了我超时并尝试重新登录并且IsNewSession等于true并且sessionId cookie仍然闲置(因为它保留整个浏览器会话)的情况,因此它说我已经定时当我只是想重新登录时再次出现. 有没有更好的方法来做这一切? 技术描述为here和here. 在我的’global.asax’文件中,我有: void Application_PreRequestHandlerExecute(object sender,EventArgs e) { // Check if session state is enabled in web.config if (Context.Session == null) return; if (Session["user"] == null) { if (Session.IsNewSession) { HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"]; if ((null != sessionCookie) && !string.IsNullOrEmpty(sessionCookie.Value)) { /* Session Timeout! */ FormsAuthentication.SignOut(); //just in case not done yet Session.Abandon(); Response.Redirect("timeout.aspx"); } else { // Cookie didn't exist - must be a brand new login return; } } else { // If there is no session data and the session is not new then it must be the postback of the login screen. if ((HttpContext.Current.Request.Path.ToLower().LastIndexOf("/login.aspx") >= 0) && (Request.HttpMethod == "POST")) { return; } } } } 解决方法
您是要尝试区分超时会话和手动注销的会话?
您的问题是,由于会话数据已经消失,您只需要进行新请求即可创建新会话,并且进入的请求会携带会话ID cookie(表示之前已登录). 有两种方法. 曲奇饼: 首先,在您的登录页面中,您可以创建一个指示用户登录状态的附加cookie.当用户手动注销时,cookie值被修改以指示注销.会话超时后的请求除了具有IsNewSession true之外还将具有登录状态cookie,其显示用户仍然登录,从而指示用户未手动选择退出. 数据库: 第二种方法是将sessionID存储在DB表中以及登录状态.登录成功后,将sessionID输入LoggedOnSessions表.当用户手动注销时,从表中删除sessionID.因此,您的超时检测可以包括查找表中的会话ID(如果存在超时)(此时您应该也可以删除ID). 出于清洁目的,您应该包括一个到期日期时间字段,其设置的时间比任何实际登录时间(例如一周)长得多.定期(例如,每周)删除表中已过期的条目. 我的偏好是数据库方法我讨厌设置cookie,因为它让我觉得每次请求都会发送cookie但很少需要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 我可以使用其他参数增加MVC Controller Action的ASP.NET请求
- asp.net-mvc – Asp.Net Mvc Checkbox为默认值?
- 在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
- ASP.NET Core多环境配置文件问题
- 重命名ASP.NET_SessionId
- asp.net-mvc – 重置asp.net mvc路由而不重置应用程序
- asp.net – Page_Init vs OnInit
- asp.net – LINQ查询,其中boolean值为true或false
- asp.net-identity – ASP.Net身份提供商请求太多信息
- asp.net-mvc – mvc route actionlink url使用name而不是id