我試圖檢測會話何時結束,然後將用戶重定向到主頁,然後在我的全局asax文件中完成此操作。在mvc4中的Global.asax中的會話超時重定向
我使用下面的代碼,我發現here
的Global.asax:
protected void Session_Start()
{
if (Context.Session != null)
{
if (Context.Session.IsNewSession)
{
string sCookieHeader = Request.Headers["Cookie"];
if ((null != sCookieHeader) && (sCookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
//intercept current route
HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
RouteData routeData = RouteTable.Routes.GetRouteData(currentContext);
//Substitute route Data Token Values for the Area
routeData.DataTokens["area"] = "";
routeData.DataTokens["UseNamespaceFallback"] = true;
//substitute route values
routeData.Values["controller"] = "home";
routeData.Values["action"] = "index";
routeData.Values.Add("timedOut", "true");
//routeData.Values["id"] = "timedOut";
IRouteHandler routeHandler = routeData.RouteHandler;
RequestContext requestContext = new RequestContext(currentContext, routeData);
IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);
httpHandler.ProcessRequest(Context);
Response.Flush();
Response.End();
}
}
}
}
我覺得還好,因爲它在開發環境,但是當我嘗試我的服務器上(IIS7)我收到下面的錯誤。 「HttpApplication.AcquireRequestState」
我已經確定使用環節的問題,像here前
「HttpContext.SetSessionStateBehavior」只能被調用,但我只是不能得到它的工作。我認爲問題是在下面的行
IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);
httpHandler.ProcessRequest(Context);
但是我似乎無法得到這個在服務器上工作。任何想法或建議?
當會話在服務器上結束時,沒有使用連接,所以會話結束對用戶無能爲力。關於您可以做的最好的事情是在與會話超時匹配的頁面中放置一個計時器。 –