2012-12-27 42 views
3

我正在開發一個多用戶桌面應用程序。我需要找出一種方法,只允許一個用戶每次登錄一個用戶名。基本上,John不能從PC-A登錄到應用程序,然後運行到PC-B並登錄。我想到的是設置一個位標誌,表明用戶已經登錄,並且當從另一個位置嘗試時,它會建議用戶當前用戶名已經登錄。這將重複,直到John on PC-A退出系統或手動註銷。唯一的問題是如果應用程序崩潰,則不會調用註銷方法。建議?防止在桌面應用程序上同時登錄多個用戶

+0

看看創建一個Mutex ..它將允許只有一個實例是我會建議.. – MethodMan

+0

你至少可以嘗試[抓住應用程序崩潰](http://stackoverflow.com/a/5762806/947171 )。沒有承諾,你可以優雅地處理它,但至少你有機會修復數據庫。 –

+0

應用程序的服務器端是什麼樣的?每個客戶端實例是否直接連接,但僅限於MySQL?或者你有自己的服務器,反過來連接到MySQL? –

回答

1

調查MySQL的GET_LOCK()RELEASE_LOCK()函數。

+0

這是如何解決它的?如果應用程序崩潰它不會釋放鎖,並且您有同樣的問題。 – Barmar

+1

如果應用程序崩潰,它會釋放鎖。事實上,一旦連接消失,鎖就會被釋放。 – ESG

+0

因此,每個客戶端都必須保持一個永久的數據庫連接,只要它正在運行,而不是根據需要進行連接。 – Barmar

2

如果您不能依賴於正常退出應用程序或至少捕獲所有異常並進行適當處理,我認爲唯一的選擇是使用會話方法。基本上,當每個用戶登錄時,會建立一個新的會話,並且這個會話ID將被驗證以用於未來的任何呼叫。

通過這樣做,您可以允許用戶在嘗試登錄其他地方時終止現有的/打開的會話。如果他們嘗試從PC B登錄並且已經從PC A登錄 - 則只需將其置於提示中,如果他們選擇從PC B繼續,則PC A上的會話將被禁用。即使有人在PC A上積極使用應用程序,他們發出的下一個服務呼叫也應該在會話關閉時被拒絕。

+0

我會'想一想這一點,聽起來像它可能是要走的路線。感謝您的迴應。 –

相關問題