我已经在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" />
表单超时= 15且Sessiontimeout = 30
应用程序在我的开发和解体环境中运行良好(在这两种环境中都没有负载均衡器。
当我在QA和Staging环境中部署应用程序时,有可用的F5负载均衡器配置,它开始表现得非常奇怪。
对于某些用户,会弹出警报,而其他一些用户根本不会显示,有时会自动退出。
功能无法正常运行且表现得很奇怪。
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;
}
}
}
}
}
我试图在我的开发和解体环境中检查代码和所有内容,但没有发现任何东西。 任何人都可以帮我了解上述问题的可能原因吗?
谢谢&amp;问候, Santosh Kumar Patro
答案 0 :(得分:0)
为了解决问题,我要求基础设施人员停止服务器并保持其他服务器正常运行。在验证问题时,我们发现会话超时警告功能正在按预期工作。通过这个,我确保F5负载均衡器对会话超时功能没有影响。在分析中,我发现我在web.config中没有machinekey标签,并在阅读了下面提到的一些文章之后:
http://aspalliance.com/383_SQL_Server_Session_State_on_a_Web_Farm http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx http://dotnet.dzone.com/news/aspnet-and-load-balancing
我包含了machinekey标签并准备了包并将其部署在两台服务器上,然后再次验证了该功能。我发现功能按预期工作。