是否可以在Asp.Net Web應用程序中允許每個用戶只有一個併發登錄?防止在用戶組中同時併發和最大登錄
我正在研究一個Web應用程序,我想確保該網站一次只允許一個用戶登錄。如何檢查當前用戶是否已經登錄。
此外,我想限制每個組的登錄數定義。像最多10個IT部門的人員一次可以登錄,最多5個人力資源部門的人員可以登錄。
我使用簡單的數據庫來存儲登錄信息
是否可以在Asp.Net Web應用程序中允許每個用戶只有一個併發登錄?防止在用戶組中同時併發和最大登錄
我正在研究一個Web應用程序,我想確保該網站一次只允許一個用戶登錄。如何檢查當前用戶是否已經登錄。
此外,我想限制每個組的登錄數定義。像最多10個IT部門的人員一次可以登錄,最多5個人力資源部門的人員可以登錄。
我使用簡單的數據庫來存儲登錄信息
因此,有你需要不斷的在這裏追蹤和檢查兩個不同的東西。
第一個是,當有人登錄時,您需要使該用戶名的任何以前的會話無效。這可以防止某人在一臺機器上登錄並在另一臺機器上登錄的微不足道的情況,因爲第一臺機器將不再能夠進行任何新的已認證請求。在大多數情況下,這對於處理那些不積極試圖顛覆這一限制的用戶來說已經足夠了。
接下來有點複雜。你需要尋找的是用戶使用相同的身份驗證會話ID,但使用不同的IP,broswers等向服務器發送請求。您要查找的是處理一個人登錄的情況,然後查看會話信息,然後在另一臺機器上重新創建一個具有相同會話ID的相同cookie。
雖然第二種方法確實存在問題。大多數人沒有完全靜態的IP。一個完整的靜態IP實際上非常罕見。也就是說,對於大多數用戶來說,他們的IP不會經常旋轉;他們不太可能在積極使用該網站時看到它發生變化。如果使用適當的網站,這些人不會有任何問題。但是,將會有一些互聯網提供商會頻繁輪換他們的IP。這些人也許不會做任何不適當的事情。如果您不處理人們的IP經常變化的事實,您最終可能會不斷踢出某些互聯網提供商的所有用戶。你真正想要尋找的是用戶使用給定的IP /會話執行的動作,然後是來自具有相同會話的不同IP的同一個帳戶上的動作,然後來自第一IP的更多動作,接下來是第二個,等等。當你看到兩個IP在很短的時間間隔內翻轉時,這表明兩個不同機器上的兩個人正在訪問該賬戶。您可以通過合併每個請求的其他方面來進一步改進此度量標準,例如瀏覽器信息(包含版本,直到最低版本組件)。
我也想限制每組用戶登錄的最大數量,有沒有什麼建議? –
@RohitChaudhari你會使用完全相同的技巧,當計數大於一個以外的數字時,你只會開始使會話無效。 – Servy
+1:由於OP可能構建某種遊戲,所以它是有用的信息。對於常規的應用程序來說,這樣的努力可能是過度的 - 簡單地允許許多登錄並處理衝突服務器端可能更容易。 –
這是您的系統,您應該已經知道用戶是否已登錄或不需要...(可能需要實施某種心跳以保持「我還在登錄」功能)。附註:這樣的設計可能會導致痛苦的用戶體驗;考慮刪除評論,因爲它是非常糟糕的主意,因此在DB中存儲「像...... *密碼*」這樣的信息。 –
@AlexeiLevenkov其實我想檢測登錄嘗試是通過不同的會話或不同的ips –
@AlexeiLevenkov這個問題其實並不那麼容易。確定一個賬戶正在同時從兩臺不同的機器上訪問,同時也沒有踢出一臺機器上訪問該站點的用戶,這比這個更復雜一點。 – Servy