2012-02-16 99 views
3

我想知道是否有一種方法可以在web.config中配置應用程序,或者在某個地方處理會話超時。我想實現的是去一些控制器,並保存會話中的日期時間和一些其他值在變量之前設置爲空,因爲會話得到的超時處理會話變量超時

+0

你有一個數據庫,你可以存儲這個會話狀態?每個用戶在創建這些狀態值之前是否進行身份驗證?我認爲你可以存儲這些值,這樣如果會話過期,你可以再次根據用戶信用查找它們。 – GrantVS 2012-02-16 22:59:13

+0

yeap,實際上在我的數據庫中有一張表,用於存儲用戶登錄時的日期時間,但如果會話過期,我無法在應用程序設置爲null之前處理此時刻。 – Jorge 2012-02-16 23:01:00

+0

您可以嘗試global.asax中的session_end嗎? – findcaiyzh 2012-02-16 23:05:19

回答

0

我不確定它是否在MVC中相同但在葉奧爾德asp.net我有一個需要登錄的時候某人的會話超時的應用程序,我做到了在Global.asax.cs中文件中的Session_End中

if (Session == null || Session["logout-clicked"] != null) return; 
TimeSpan ts = DateTime.Now - (DateTime)Session["session.start"]; 
new EventLog() 
{ 
    EventLogType = EventLogType.SessionTimedOut, 
    UserId = ((UserObject)Session["UserSession"]).Id, 
    DateStamp = DateTime.Now, 
    LogData = "logged in for: " + (Int32)ts.TotalHours + "hrs " + ts.Minutes + "mins", 
    CachedName = ((UserObject)Session["UserSession"]).Name 
}.Save(); 

顯然你必須設置一些在你的登錄方法中,這些會話變量(如果你想要那種信息,比如總登錄時間/會話時間),你可能會有自己的方法來保存任何你需要保存的數據...但希望那一大堆t啓發一些想法?

我有一個「註銷點擊」會話變量(當你點擊註銷時設置),因爲當用戶點擊註銷時,它將有不同的日誌和Session_End調用Session.Abandon()後調用,所以我需要確保它沒有記錄註銷,然後是會話超時。

+0

Session_End有侷限性。首先也是最重要的,它只在使用InProc會話管理時才起作用。其次,根據您存儲的內容,您可能會根據關閉瀏覽器的用戶獲取不準確的數據。您將無法分辨在網站上超時的用戶與關閉瀏覽器窗口的用戶之間的區別。 http://stackoverflow.com/questions/1262867/session-end-code-on-browser-close – 2012-02-17 17:49:39