在asp.net mvc2应用程序中,F5 loadbalancer对会话超时的影响是什么?

时间:2013-06-14 16:37:08

标签: jquery asp.net-mvc-2

我已经在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

1 个答案:

答案 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标签并准备了包并将其部署在两台服务器上,然后再次验证了该功能。我发现功能按预期工作。