2009-09-27 39 views
1

有沒有辦法做Session.Abandon()時,用戶只是用右上角的小紅色X框來殺死會話?我看到在「X out」之後,用戶重新進入並且似乎仍然存在會話變量的情況?我猜資源管理器讓它們保持完好? (我不確定這一點)。如果用戶X退出瀏覽器,如何放棄會話?

+0

因此,您的頁面上有一個實際的X按鈕,它具有調用Session.Abandon()的單擊事件? 然後用戶回來並且會話變量存在? Global.asax中的Session_Start中有任何東西嗎? – 2009-09-27 06:39:04

+0

我只在當用戶按下注銷鏈接時放棄會話。我希望能夠抓住X out事件。 – James 2009-09-27 06:43:39

回答

2

你可以嘗試在OnUnload事件中做一個AJAX類型的回調 - 但是,正如別人提到你必須知道其他標籤被打開(不容易),並且它仍然不能保證你得到事件。

有一些事情要做,以獲得類似的效果類型的組合。

  • 會話Cookie應該有一個空/空的到期時間。這可以確保瀏覽器關閉後瀏覽器從會話結束時刪除會話。

  • 可以使用一個簡短的SessionState超時值來設置ASP會話。這意味着如果在此期間沒有客戶活動,則會話將過期。

這樣做的副作用是,如果用戶只是看網站,不執行活動(不論瀏覽器是否仍處於打開狀態) - 會話可能會過期。

這可以通過讓Javascript定時器定期通過AJAX調用或類似方式回到服務器來解決。這個副作用是它產生更多的網站流量。

1

服務器通常不知道客戶端上的這類事件。如果有任何請求被髮送回來,服務器可以通知的唯一方式就是通知服務器。我想你可以在JavaScript中創建這樣的通知,但是你還應該記住,會話記住會話不是每頁,而是(通常)每個用戶,這意味着你需要跟蹤用戶打開了多少個選項卡/窗口,以便在不應該的情況下不會中斷會話。我個人通常會嘗試設計Web應用程序,以便它們能夠很好地處理會話的默認處理,或者提供特定的「註銷」命令來終止會話,或者直接讓它超時並死掉。

+0

如果我可以用jscript或jquery捕獲它,我可以使用隱藏按鈕單擊來通知服務器。不知道我怎麼會用jscript捕獲它。 – James 2009-09-27 06:45:44

+0

我不是javascript大師,但我會研究'window.unload'事件。雖然可能會更好。 – 2009-09-27 06:48:47

相關問題