我已经使用以下文章在 asp.net mvc2 应用程序中实现了显示会话超时的警报消息,并根据要求进行了一些自定义:
http://fairwaytech.com/2012/01/handling-session-timeout-gracefully/
以及以下会话状态模式:
<sessionState mode="SQLServer" sqlConnectionString="Data Source=StudentsDB;User ID=xxxxxxx;Password=xxxxxxx;Integrated Security=False;MultipleActiveResultSets=True" allowCustomSqlDatabase="true" cookieless="false" timeout="30" compressionEnabled="true" sqlCommandTimeout="240" />
表单 timeout=15 和 Sessiontimeout = 30
该应用程序在我的开发和开发环境中运行良好(两个环境中都没有负载均衡器。
当我在有 F5 负载均衡器配置可用的 QA 和 Staging 环境中部署应用程序时,它开始表现得很奇怪。
对于某些用户,警报弹出来,而其他一些用户根本不会出现,有时它会自动注销。
该功能运行不正常并且行为怪异。
F5 负载均衡器上没有启用粘性会话。
在 Global.asax.cs 文件中,我有以下代码:
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
Only access session state if it is available
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
//If we are authenticated AND we don't have a session here.. redirect to login page.
HttpCookie authenticationCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authenticationCookie != null)
{
FormsAuthenticationTicket authenticationTicket = FormsAuthentication.Decrypt(authenticationCookie.Value);
if (!authenticationTicket.Expired)
{
//of course.. replace ANYKNOWNVALUEHERETOCHECK with "UserId" or something you set on the login that you can check here to see if its empty.
if (Session["IsSessionValid"] == null)
{
//This means for some reason the session expired before the authentication ticket. Force a login.
FormsAuthentication.SignOut();
Response.Redirect(FormsAuthentication.LoginUrl, true);
return;
}
}
}
}
}
我试图检查我的开发和开发环境中的代码和所有东西,但没有发现任何东西。任何人都可以帮助我了解上述问题的可能原因吗?
谢谢和问候, 桑托什·库马尔·帕特罗