2014-02-07 58 views
0

我使用Visual Studio 2012(VB)和jQuery 1.8.2,使用Javascript 1.5和Windows Server 2008 R2補漏Session_End中在vb.net 2012

我需要一種方法來保證, 「一些事情」 發生在用戶會話的結束。 - 向客戶發送電子郵件,告訴他們在會話期間做了什麼

看起來很清楚,許多其他Web開發人員在用戶會話結束時會發現他們需要「確定」的東西!

我想到的第一個地方是Session_End中(DOH)。但是Session_End似乎依賴於web.config中的超時或者調用Session_Abandon,並且我遇到了他們不工作的情況。

雖然我有一個註銷按鈕,但是人們總是不會使用它,只是關閉瀏覽器。

我花了很多時間試圖用onbeforeunload實現「陷阱瀏覽器關閉」邏輯..(陷阱/日誌回發事件和onbeforeunload,檢查日誌 - 如果事件意味着他們離開網站,打電話Session_Abandon,等..)

有沒有人解決了這個?如果沒有,爲什麼?我不能給需要它的第一人..

+0

爲什麼Session_End不適合你?爲什麼不在web.config中設置超時? – mason

+0

除了發送電子郵件,我需要斷開會話期間建立UNC連接..我不想依靠Session_End中有連接打開的時間比我要...(和感謝非常快的回覆! ) – notallwhowander

回答

0

聽起來像是你應該通過AJAX在客戶端輪詢服務器每隔幾秒鐘。如果一段時間過去了,並且客戶端沒有簽入,那麼服務器可以進行清理。如果你需要從處理中會話狀態(不擴展)更改爲SQL Server會話狀態

+0

我看到了一個類似的項目[這裏](http://code.msdn.microsoft.com/VBASPNETDetectBrowserCloser-f501cffe/view/SourceCode)(雖然我不認爲它使用AJAX)這似乎是一個自定義會話超時。這比任意一個更好。我想我只是很驚訝,我們沒有一個確定的方式知道瀏覽器是用我們的網站完成的。謝謝! – notallwhowander

+0

網頁設計爲[無狀態](http://en.wikipedia.org/wiki/Stateless_protocol)。 – mason

0

Session_End中無法擴展。 msm8bball有一個很好的建議,但我會設置不少於一分鐘的輪詢。您必須說明,除非您的設計禁止它,否則同一用戶可能同時打開多個會話。