2012-08-26 49 views
0

我有這個歷史遺蹟是惰性破碎,正在被替換的過程中。直到替換網站準備就緒,我必須維護此網站。在會話超時重定向到兩個不同的登錄屏幕之一取決於查詢字符串

問題是我有一個網站需要知道登錄用戶的組碼。例如我有兩個組Group1和Group2。

默認的登錄頁面上

簡直是.../login.aspx的,這將在會話(組=組1)存儲和如果要是使用轉到日誌在... /登錄頁面。 aspx?group = Group2,那麼他們將Group2存儲在會話中。

爲什麼這樣做是這種方式的原因是以前我的時間被它是用於驗證的非常複雜的登錄屏幕,並設置多個會話變量的網站上來是必要的。 表示這意味着在此階段不能替換頁面中的日誌。

什麼,我需要一種方式,當會話超時,用戶將被引導到登陸頁面的正確的變化,並記住他們,以便他們可以返回到該頁面的頁面。

最小的解決辦法是讓他們重定向到正確的登錄的版本,以恢復他們在辭職後的頁面也只是「想」的功能。

任何人都可以點我就如何做到這一點的正確方向,在會話結束事件似乎並不會話消失在這一點所以沒有進行比較的工作。

回答

1

如果您可以修改登錄頁面,把它存儲在cookie 1或組2後登錄成功。加載登錄頁面時,請檢查您的組cookie是否存在。如果有,您可以重定向到適當的登錄URL。

+0

是的,這是我最終走下來的路徑,謝謝我最終不得不使用cookie和查詢字符串來確定會話定時或發生錯誤。然後我處理cookie的vlaue。如果頁面被訪問並且cookie存在,但查詢字符串不存在,那麼它會像cookie不在那裏一樣前進。感謝您的幫助:D – Graham

0

我不認爲你可以做到這一點。

正如你所說的,在Session_End事件中(可能你正在使用InProc會話來觸發此事件) - 沒有會話來確定用戶在哪個組中。即使你可以獲得會話變量, Session_End事件中沒有HttpContext,因爲它發生在服務器上,沒有Http請求 - 所以你不能重定向。

此事件可能觸發與現場坐在屏幕此時,窗體身份驗證將重定向回登錄屏幕,或用戶已經關閉瀏覽器後可能發生長。

編輯 - 更多信息所需

您是否使用InProc會話和窗體身份驗證的應用程序? 。

如果是這樣,一個可能的解決方案是創建一個可以運行之前FormsAuthentication會認識到,會議/驗證的Cookie在請求已經過期,重定向回登錄一個HttpModule

正如布拉姆說 - 如果你將信息存儲在另一個數據存儲區中 - 您可以從HttpModule獲取此信息,並從那裏進行自定義重定向。

被警告說,會的HttpModule運行的每個請求,所以任何的DB調用等可能是一個性能消耗。

+0

如果這不是一個答案,那麼它是一個評論。即使沒有答案。 – Paparazzi

+0

我不能評論其他人的問題 - 你至少需要15個代表:) – AndrewK

+0

確定一個Session_End將按照定義發生而沒有請求。但Session_End不需要重定向。如果沒有請求,請求就不會發生。該請求將傳遞SessionID,因爲請求不知道它的會話已結束。 – Paparazzi

相關問題