2012-11-01 40 views
0

只要Session變量爲空或空,目標就是將所有用戶重定向到每個httpRequest上的自定義安全頁面。此網頁在Global.asax中有一個重定向循環

在Global.asax中

的方法將導致錯誤如下:

此網頁有重定向循環 的網頁生成了過多的重定向。清除您的本網站的Cookie或允許第三方Cookie可以解決此問題。如果沒有,這可能是一個服務器配置問題,而不是您的計算機的問題。

protected void Application_PostAuthorizeRequest() 
{ 
    if ((Session["SecurityCodeApproved"] == null || !(bool)Session["SecurityCodeApproved"])) 
    { 
    Response.RedirectToRoute("Security"); 
    } 
} 

回答

1

它看起來像你重定向到同一頁面,檢查會話cookie是否設置,如果沒有,再次重定向。它將不斷重定向,直到設置了會話cookie,並且您沒有設置它。您需要重定向到其他地方或設置Cookie來打破循環。

+0

如何檢查「會話cookie是否設置」? – arlen

+0

在if語句之後添加一個'else {// cookie is set}'。 (你的if語句檢查cookie是否沒有設置,所以如果是的話,你進入你的else並且可以處理它。 – Andy

+0

當我嘗試運行代碼時,它捕獲if語句中的另一個錯誤「會話狀態在此不可用上下文「。 – arlen

1

不要在Global.asax中這樣做,因爲正如你所注意到的,每次事件觸發時你都不會有一個會話。此外,您的代碼將在ALL請求中觸發,包括針對CSS,圖片和JavaScript等資源的請求。你想要做的是使用全局過濾器屬性來執行你的邏輯,或者如果你正在使用WebForms,你想在頁面級別執行此操作。

當執行過濾器時,您將獲得一個FilterContext,該FilterContext將具有您所需的請求和會話對象。

然後,您可以重定向到您的安全頁面,但請確保您的過濾器屬性在安全點上被忽略。

+1

但是如何?你能否給我一個例子? – arlen

相關問題