2011-02-24 151 views
1

顯然,我不熟悉ASP.NET中頁面的生命週期。當我離開頁面後想要處理Session變量時,這變得很明顯。我做了什麼最有意義的:ASP.NET頁面生命週期問題

protected void Page_Unload(object sender, EventArgs e) 
    { 
     Session.Remove("ServiceSearch"); 
    } 

我不知道的是,當我從AND進入頁面時會調用它。我想要做的是在用戶離開頁面時處理該Session變量。我該怎麼做呢?

回答

3

Page_Unload指的是在解析並創建頁面之後將其丟棄之前對象Page的卸載。它與離開頁面無關。就像@尼克說的那樣,除了控制每個退出路徑之外,沒有什麼好的方法可以說明這一點。你不能,因爲你無法控制用戶什麼時候回來,或去google.com,然後粘貼到他們剛剛瀏覽器的網址等。

如果你想刪除Session變量只是因爲它不會無意中被重新使用,更好的解決方案是每次進入頁面時覆蓋Session變量,並且讓它在會話過期時隨會話一起處理。

0

如果用戶通過鏈接離開頁面,您可能會創建一個鏈接按鈕,並鏈接到同一頁面上的方法。該方法將刪除會話並執行重定向。

我希望有一個更好的解決方案。雖然,從我的理解,沒有頁面事件在您的情況下使用,因爲該頁面將不得不重新加載執行刪除會話代碼。當用戶通過某個鏈接離開時,頁面不會被重新加載。

您可能可以通過javascript處理它。我一直處於我想離開的地方,並且有一些關於一些bs的彈出框。您可能可以使用相同的技術來觸發AJAX以刪除會話。

2

會話數據對於存儲超出頁面生命週期的數據非常有用。如果您不希望將其存儲在頁面的生命週期之外,那麼會話數據不適合您。

0

我在php登錄時遇到過類似的情況 - 登錄的用戶可以使用箭頭來回登錄頁面。所以,我只需添加:

session_start(); 
session_unset(); 
session_destroy(); 

登錄頁面的HTML腳本的上方,如果登錄用戶箭頭後面,會議既沒有設置並銷燬。任何向前箭頭的嘗試只會導致登錄頁面 - 請求用戶登錄憑據 - 實質上,用戶在箭頭回退時退出! 希望這有助於!

Alfred