2009-06-21 138 views
0

我有,我一定要限制登錄的用戶按以下細節的情景:如何限制用戶登錄?

當第500個用戶嘗試登錄我的網站會出現一個消息「用戶登錄超過,請稍後登錄! 「

一次只能登錄499個用戶,第500個用戶是管理員。還需要在管理員頁面視圖中顯示在線用戶。那麼,如何計算用戶的登錄,並限制人數高達500

請提供有關aps.net答案C#

+1

你在這裏有一個global.asax作爲標記,所以你可能知道Session_Start和Session_End,那麼這有什麼問題?使用這些事件不應該太難實現。你能否提供更多的細節? – Kobi 2009-06-21 11:18:28

+0

但是,無論何時用戶關閉瀏覽器,都不會遇到Session_End事件。 – 2009-06-21 11:21:19

回答

0

在PHP中,你會通過更改會話的行爲,以便它們存儲做到這一點在DB中。通過這種方式,您可以對有多少人登錄進行大致計數。

我假設有一種方法可以在ASP中執行此操作。

0

如果你有一個很好的表演RDBMS(和良好的網絡),你可以在表格中登記的信息......但如果這是昂貴簡單地使用提供給您的服務器端技術(會話,應用等一些類)。

與JS是不可能做到這一點。你在哪裏儲存了全球的信息(計數器變量)?

每當客戶端連接到服務器的所有JS代碼重新加載,這樣你就沒有辦法來存儲這些信息。

另外,如果你想使用cookies記住,cookie是特定於它們所使用的客戶端。

0

實現此目的有多種方式。

DB中的會話是一種方式。不過,這可以用來了解您的網站上有多少匿名用戶。

另一種方式來完成你正在尋找的任務是標誌一個叫,說,新領域在用戶表中的用戶「LOGGED_IN。」

當登錄方法執行,該標誌被相應地修改,以註銷方法類似。然後,每次用戶嘗試登錄時都會運行SELECT查詢,以檢查當前登錄的人數並相應地執行操作。

一個更好的方法是在DB中記錄多少登錄用戶的總數,增加和減少,取決於執行「登錄」或「註銷」方法。通過這種方式,您無法知道在特定時刻哪些特定用戶已登錄,但您至少會得到一個您需要的總數。此方法更好,因爲您不必在整個用戶表上運行SELECT查詢,而是可以從數據庫中獲取特定字段的值,從而提高性能。不幸的是,如果他們每次都不註銷,那麼這種方法就沒有用處,除非您還存儲他們的登錄時間並在一段時間後註銷它們。

要嘗試解決用戶可能關閉瀏覽器而不是「註銷」的問題,您可能需要存儲會話,並結合上面提出的數據庫結構。

0

在asp.net你可以添加一個名爲global.asax。該文件具有應用程序級別的事件,包括Session_StartSession_End。如果您正在使用數據庫,這將使跟蹤會話變得很容易。

0

您需要跟蹤當前登錄數據庫的用戶。 Sev提供了一些關於如何完成它的好主意。但正如他對答案的評論中也提到的那樣,當用戶單擊「註銷」按鈕時,您不能僅將用戶標記爲已註銷,因爲許多用戶只是在沒有正確註銷的情況下關閉網頁。

所以你需要一個會話管理,在用戶不活動的sosomayn秒後自動發送會話。

在我的網上銀行軟件中,這是90或120秒(更高的安全性),在amazon.com至少幾個小時(更好的customerexperience)。您設置此超時時間取決於您的應用程序的特定要求。

無論如何,這是一個相當普遍的問題,所以應該有一些框架已經實現了這一點。

2

我認爲這適合於應用程序上下文處理。

只是不保存這些東西在MS SQL,因爲它浪費資源連接到數據庫。

最簡單的方法是創建一個單例對象來保存有關在線用戶數量的數據。此對象可能在Application_Start事件中實例化

每次發生登錄操作時,都會鎖定對象,取消當前用戶計數,然後釋放鎖定。