2010-02-02 162 views
0

在我們的系統中,一個客戶端可能有多個運營商。但客戶有一個「願望」。 一家公司有一個賬戶,但是可以有多家運營商分配給這家公司。客戶希望我們準備一個解決方案,只有一家公司的運營商可以同時登錄系統。我怎樣才能做到這一點?允許在登錄時僅登錄一個用戶

+0

你如何驗證?是否有數據庫參與?這是一個分佈式環境? – 2010-02-02 17:26:40

+0

是的..爲了驗證的目的,數據庫涉及 – 2010-02-02 17:31:59

回答

0

「我使用WPF應用程序和服務器用WCF,但是可以做到這一點。但是當用戶有一個應用程序打開並且處於非活動狀態30分鐘時,情況如何?「

該系統將是單用戶,所以我建議您在用戶登錄時啓動一個計數器線程。當計數器達到30分鐘,向db寫入一個值,表示用戶超時,其他用戶可以自由登錄。顯然,當用戶明確註銷時,你應該做同樣的事情。

+0

一個計數器線程?這是相當浪費和**糟糕的設計** ....超時邏輯應該是服務器邏輯的一部分,而不是作爲一個線程 - 但作爲一個數據結構/錶行檢查需要保護的請求...如果這是erlang,並且你創建了一個計數器線程......那可能沒問題。 – 2010-02-03 11:08:21

+0

我錯過了你的觀點...... 「但是作爲一個數據結構/表格行檢查需要保護的請求」......當然,這是顯而易見的,否則就沒有實用價值db表示用戶超時。但是,您認爲,檢查用戶是否超時的好方法是什麼?至少到現在爲止,我想不出另一種方式。 – 2010-02-03 11:37:18

+0

請閱讀我答案中的文章 - 它將突出分佈式身份驗證的各個方面。 – 2010-02-03 15:28:56

1

您可以使用數據庫字段來標記它們已登錄。當它們這樣做時,將該字段更新爲「已登錄」,然後在它們註銷時將其更新爲「已註銷」。

如果用戶從來不打算明確註銷,您還需要監視登錄會話的過期時間以更新字段。

+0

是的..我想這樣做,但我如何監視登錄會話? – 2010-02-02 17:31:22

2

只要確保他們的系統有能力驗證每個請求的登錄。任一

  1. 積極(通過查詢狀態 - 可能數據庫來比較一些祕密)或
  2. 被動 - 使用某種形式的加密和標記(可能在cookie)的。

選項一最簡單,選項2最快。如果您對每個請求進行驗證,您可以確保只有一個用戶保持登錄狀態 - 如果有其他用戶登錄,則可以使現有的活動登錄無效 - 可能需要n分鐘的冷卻時間。

你必須制定某種形式的登錄方案 - 的Kerberos是事實上的計劃 - 閱讀的Kerberos Designing an Authentication System: a Dialogue in Four Scenes這個易於遵循教程應該告訴你真的需要做什麼。

1

我用過的最好的辦法:

  1. 創建用於跟蹤操作員是否在(如用戶名和last_accessed_dt)
  2. 在由運營商更新的最後一個請求的每個頁面請求記錄表日期/時間
  3. 當操作員嘗試登錄時,他們只能在網站上的最後一次請求的數據/時間>會話超時時間段內(例如30分鐘)或者他們是最後一次操作員用戶ID時這樣做......他們可以快速恢復註銷等方式。
  4. Whe n以下的運營商註銷有上次訪問清除
  5. 當會話超時有上次訪問清除
+0

我使用WPF應用程序和服務器寫入WCF,但是這可以實現。但是,當用戶打開一個應用程序並在30分鐘內不活動時,情況如何? – 2010-02-02 17:35:45

相關問題