2013-07-07 43 views
1

我讀過OnDisconnect服務器端)有時可以繞過(應用程序回收等)。OnDisconnect和回收後登錄用戶?

的OnDisconnected方法不會被調用在某些情況下,當一臺服務器出現故障或應用程序域得到回收等 的。

於是我問:

當用戶連接,我產生他一個token,保持它在用戶cookie,當OnConnect叫,我附上connectionId與該令牌。

(其中onDiconnect被稱爲以同樣的方式,我設置在dateDisconnected的值)

這也將支持2名連接的用戶(相同瀏覽器)

例如:

enter image description here

示例:

id   tokenId    ConnectionID   DateCreated   dateDisconnected 
---------------------------------------------------------------------------------------------- 
1   500     {1234-1234}   06-07-2013    null    
2   500     {5432-5432}   06-07-2013    null    

這裏的問題是:如果用戶已經登錄

會發生什麼(所以我寫這篇文章的用戶在我的數據庫爲登錄),做一些聊天,然後再次啓動服務器?

客戶端將嘗試重新連接,並在30秒後停止。

但隨後,當服務器是UP(一小時後) - 我STILL有一個登錄的用戶在我DB。他是不是。 (好吧,不是那個連接ID ......)

我該如何解決這類問題?

回答

1

解決此問題的最佳方法是在應用程序啓動時記錄所有人,也就是說在您的情況下將所有登錄的令牌行無效/刪除。因此,無論何時服務器啓動應用程序處於新鮮狀態,沒有人登錄。

+0

嗨:-)我想在雅布布問你關於這個問題。 (但是當你給我發送信息時,我會離線:-)但是,請你詳細說明你的解決方案嗎?我不認爲我得到它100%(有人還建議一個計時器「保持活着」數據庫記錄:例如 - 每分鐘更新一個日期在db。 –

+0

您的問題的基礎是,當服務器重新啓動您的所有數據庫記錄aren所以我建議每當你的應用程序啓動時(Application_Start)你可以註銷你的數據庫中的每一個用戶 因此,當服務器重新啓動並碰巧發生6在您的數據庫中留下登錄的用戶。當您的應用程序啓動備份並且Application_Start被觸發時,您可以刪除每個登錄用戶,導致0登錄用戶,因此沒有殭屍項。 –

+0

謝謝(一如既往) –