2009-04-13 56 views
1

我們在開發網頁時遵循我們工作中的一個過程,是將頁面綁定到一個或多個會話變量,這些會話變量僅用於該頁面,以保存當前的處理對象,因此在關閉頁面時不需要他們。如何在關閉網頁時放棄會話變量?

如何在關閉頁面時放棄這些會話變量? 有關該技術或如何解決該問題的任何建議?

回答

4

有當頁面左側是沒有提出服務器端事件/關閉被解僱。此外,由於用戶可能導航到同一Web應用程序的其他頁面(因此會話將繼續存在),因此在頁面被留下時不會調用Session_End事件(在其他答案中提及)。

我能想到的3點可能的方式來解決(或解決)這個問題:

- 使用的ViewState存儲與頁面範圍的數據。這就是ViewState的作用,除非你有很多數據,否則它不應該是一個問題。如果您有大量數據,請記住,它將被序列化/反序列化併發送到客戶端/返回到服務器以獲取每個請求(這可能會導致大量請求並因此導致性能下降)。

- 而不是把該數據到會話,把它放入緩存(具有低滑動過期超時)。在您的頁面上,您可以像訪問會話一樣訪問數據,即data = Cache [「data」],但必須準備好將數據從Cache中移除(您必須重新加載它例如,再次來自數據庫),如果兩個請求之間的時間大於到期時間。

- 使用客戶端(JavaScript的)onunload的事件,並且觸發某些動作(例如Ajax回調)以從會話中刪除的數據。但我認爲onUnload事件不可靠(在任何情況下它都不會被觸發,例如,當瀏覽器因崩潰或任務管理器終止,或者JavaScript被禁用時)。

0

如果僅爲該頁使用變量,請將它們存儲在viewstate中。 ViewState適用於頁面作用域變量。

-1

如果您正在使用ASP.NET會話(您可能是),您可以添加一個global.asax文件到您的解決方案。在那裏這個事件代表被發現(如果沒有,創建它):

protected void Session_End(object sender, EventArgs e) 
{ 

} 

..在這裏,您可以清除您的會話集合。

protected void Session_End(object sender, EventArgs e) 
    { 
     Session.Clear(); 
    } 

這將當會話過期時,或者當用戶點擊退出:)

+0

當會話過期或當用戶單擊註銷時,會觸發這種情況,當頁面關閉/關閉時,我需要將這些會話變量解散嗎? – Ahmed 2009-04-13 09:53:08

+0

我的不好誤解然後:)你應該看看馬丁的答案 - 但是,你不能依靠客戶端告訴服務器何時關閉一個頁面(或導航到另一個)。這是問題的基礎:( – cwap 2009-04-13 09:57:08