2012-05-10 69 views
1

我想限制對Internet或Intranet Web應用程序的併發訪問。限制對Asp.Net應用程序的併發訪問

我希望能夠允許一定數量的併發訪問,假設我想允許使用相同用戶名的最多20個併發訪問。

我可以想象在登錄時創建一個會話並將其保存到數據庫中,但增加一個計數器,但無法從數據庫中刪除它並在用戶註銷時遞減計數器,因爲用戶可能會關閉瀏覽器。

夥計,你認爲最好的方法是什麼?

感謝,

+0

您可以在註銷時調用遞減函數。我建議你爲這個項目使用SqlState服務器 –

+0

稍微OT,但你真的解決了正確的問題?只有20個用戶聽起來像受到某些商業服務運行後端的限制,而不是由於您的服務器。您的解決方案是否真的需要這個業務服務器,或者您是否可以將其限制在需要的地方? – LosManos

回答

0

您可能希望在會話中使用「lastactive」字段。當有人嘗試登錄或以其他方式創建會話時,您可以查詢在一段時間(例如15分鐘)內處於活動狀態的所有會話,並使用結果計數來告訴您有多少併發會話處於活動狀態。

1

你是正確的,你可以不知道,如果用戶只是殺死他的瀏覽器或拉電源線。

創建一個定時器,每隔30秒執行一次Ajax調用並記錄它。如果用戶不在此日誌中60秒 - 扔在服務器上。
這不會阻止某人離開他們的瀏覽器打開過夜,並佔用一個插槽。

another answer提到「最後活動」字段。另一方面,當有人需要讓瀏覽器打開以查看超過分鐘超時限制的內容時,這會導致混亂。

如果有人因用戶/超時限制被拋出;我認爲如果再次打開插槽,讓它們以完全透明的方式自動重新登錄會很好。

沒有想太多,我相信這個解決方案會產生其他問題。

編輯離開:
正如我評論 - 20個用戶 - 你真的解決了正確的問題嗎?

+0

我擁有的Web應用程序可以同時服務數千個用戶。因此,對於小公司來說這是一個昂貴的代價,因此,我希望按每個訪問進行定價以幫助小公司。所以,這個數字不是固定的,因客戶而異。請注意,大多數客戶有不同的網址來滿足他們的需求 –