2010-09-15 116 views
3

我有一個ASP.NET MVC2 Web應用程序,它使用InProc會話來存儲登錄用戶的ID。在控制器中,我使用自定義的AuthorizeAttribute來檢查Session是否有有效的ID。ASP.NET MVC會話超時和TempData

我也在使用GET-> POST-> REDIRECT顯示確認消息後,在我的控制器中使用TempData。例如,當用戶註銷時,我的Logout()控制器操作清除Session,設置TempData [「Message」]並重定向到Login()操作。 Login()操作會顯示任何不爲null的TempData [「Message」]。

TempData["Message"] = "You have successfully logged out."; 

我的問題(最後)如下。如果會話超時,我希望能夠將用戶重定向到Login()操作,而不是用戶註銷。

TempData["Message"] = "You have been logged out due to inactivity."; 

我不知道,如果1)使用TempData集合的是在這種情況下適當或2)在適當的地方來處理這將是。

我想盡可能保持在MVC指導方針/最佳實踐中,所以看起來,以某種醜陋的方式使用Session_End並不是我想要的方式。我想避免在查詢字符串中傳入?timeout = true。

有什麼想法?

回答

1

當會話過期時,您無法在服務器上執行任何操作,因爲瀏覽器始終未連接到服務器。

我會創建一個javascript函數,在sessionperiod過期後的很短時間內刷新頁面。