2013-10-19 104 views
0

這裏是我已經注意到,當用戶會話過期的問題,他/她點擊,而不是註銷的Web應用程序如 http://www.mywebsite.com/myreport.aspx?picture=1 他們被帶到頁面的鏈接,或者新的登錄頁面。凡過濾會話過期

我想寫一些代碼的地方,以便在它到達Page_Init之前它檢查一些條件..我認爲每個請求都必須通過global.asax,但顯然我上面提到的那個,並不直接去該頁面會引發各種錯誤。 我可以在每個頁面上編寫代碼,但根本不會很優雅,所以我想寫一些地方,每個請求必須通過,有或沒有會話..

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

我假設你已經嘗試過Application.BeginRequest的global.asax。如果這不起作用,您可以嘗試創建一個Http模塊。有關文檔,請轉至here

基本上Http模塊爲您提供工具來掛鉤ASP.Net請求處理,以便您可以添加自定義邏輯。有一個詳細的演練here用於創建模塊。

0

在助手類中創建CheckSession方法,並在基頁的第一行中從Page_Init中調用它,現在您要驗證會話的所有頁面都從該基頁繼承它們。

如果會話已過期CheckSession可以將用戶重定向到已定義的頁面。

如果會話已過期ASP.NET不會重定向到任何頁面,但代碼不會查找先前保存在會話中的數據。

+0

-1用於暗示大規模代碼複製 –

+0

它只是一個方法調用在需要檢查會話有效性的頁面上覆制,會話檢查邏輯不重複。當不是首先登錄所需的所有頁面訪問權時,這可以更好地進行控你能解釋一下你在哪裏看到「大量代碼重複」嗎? – Morbia

+0

我注意到你說,「每頁上的第一行」。這是很多重複。 –

1

我想每個請求都必須通過global.asax,但顯然我上面提到的那個不是。

你認爲是對的,我會集中精力找出爲什麼global.asax中的事件似乎沒有被解僱。

它們被帶到頁面,而不是註銷或新的登錄頁面。

如果您使用表單身份驗證,而不是滾動自己的表單,那麼會話過期與表單身份驗證票證的過期無關。因此,您不應該期望用戶被重定向到登錄頁面。

後進入的網頁,它會引發各種錯誤

的你不說什麼錯誤,但想必你試圖訪問Session對象時,意味着空引用例外。這裏的最佳實踐是在可能的情況下簡單地從持久性存儲(例如數據庫)靜默地重新創建會話對象。但如果你不能這樣做,你應該檢查null和重定向到主頁。您應該能夠在global.asax中的Application_AcquireRequestState事件處理程序中執行此操作,該處理程序是global.asax中的第一個可用Session的事件。