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但很少需要. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 用于局部视图的ASP.NET MVC 3控制器操作
- ASP.NET OAuth授权 – 使用ClientId和Secret以及用户名和密
- asp.net-mvc – MVC的实际应用||什么时候使用,还是不使用MV
- asp.net-mvc – 从Asp.net MVC发送HTML电子邮件的最佳方式是
- asp.net – Javascript:为什么如果(假)?
- asp.net-mvc – Context.User.Identity.Name为null与Signal
- asp.net-mvc – Jasmine在一个单独的测试项目中
- asp.net-mvc – 您是否使用任何自定义ASP.NET MVC HtmlHelp
- asp.net-mvc-5 – 在MVC 5的IPasswordStore中,SetPasswordH
- asp.net-mvc – 在MVC3中使用Html.BeginForm是什么
