2012-08-16 42 views
2

我想知道什麼是最好的(例如最高效,普遍接受的行業標準)方法來處理潛在的會話過期,當您定期使用存儲在其中的值時你的代碼。正確處理潛在會話到期的方法

例如,我經常使用(在C#)類似於以下行:

Guid personGuid = (Guid)Session[SSPersonGuid]; 

我在Page_Load中檢查值是否爲空,並相應處理,但會議可能會在此人到期在頁面上,在這種情況下,當他們點擊頁面上的一個按鈕時,我們需要使用類似上面的內容,會有NullReferenceException。

是處理最好的辦法只是這樣每次使用之前檢查空:

if (Session[SSPersonGuid] == null) {...} 

還是有某種我不知道特別的東西?

回答

1

什麼是最好的(例如最高效的,普遍接受的,行業標準的 )處理會話潛在到期的方法?

最好的是,他們不會過期設置a Out-Of-Process session state serverout-of-process SQL Server

你也可以檢測它在The Session_OnEnd Event

編輯:http://www.codinghorror.com/blog/2008/04/your-session-has-timed-out.html

我淹沒在每天的會話超時消息:

東西傑夫·阿特伍德說,在這裏與斯科特的答案對應來自各種源,但我從來沒有見過從例如 gmail的會話過期消息。這裏是我的建議:

  1. 在發送 定期心跳到服務器的瀏覽器創建一個後臺的JavaScript程序。重新生成一個新的cookie,定時 到期,比如每5分鐘或10分鐘。

  2. 如果您擔心 會話劫持 - 而且您確實應該 - 使用受HTTPS保護的 連接。對於任何類型的金融機構 來說,這絕對是不容小覷的。

+0

與StateServer和sql服務器方法,會話仍然可以超時雖然他們在頁面上雖然他們不能? – standgale 2012-08-16 04:22:42

+0

看我的編輯。關於在進程外存儲時丟失會話,可能會發生如果StateServer進程重新啓動或重新啓動服務器......可能會發生個人從未見過或經歷過進程外會話超時的情況。 – 2012-08-16 04:44:29

+0

我要麼做錯了事,要麼根本不明白它應該如何工作。我試着通過設置2分鐘的超時時間來測試它,看它是否仍然超時,並且在兩分鐘後仍然有效。根據我的理解,數據(例如SSPersonGuid)應該仍然可用。或者我不應該設置超時時間,並且永遠不會超時。或者,我還需要做些其他事情才能切換到StateServer模式(所需的服務正在運行,也就是說我需要重新啓動某些設備才能識別設置)。謝謝你的方式。 – standgale 2012-08-17 01:37:50

0

我看到的很多是與包括檢查是否會話即將到期的定時器每個頁面加載的JavaScript。如果是這樣(例如在2分鐘內),則顯示一個彈出窗口,告訴用戶會話即將到期,並詢問用戶是否要繼續。然後腳本可以向服務器發回AJAX呼叫以保持會話的活躍。

但是,這不會阻止用戶關閉JavaScript的問題。

+0

當IIS回收wpw3進程時,這是如何工作的?如果您不知道IIS何時要回收該過程,您怎麼知道會話將會過期?我很想看到代碼。 – 2012-08-16 03:13:10

+0

在大多數情況下,但並非所有情況下,都可以禁用回收。 http://stackoverflow.com/questions/3156925/stop-iis-7-5-application-pool-recycling – 2012-08-16 03:19:55