2012-02-22 61 views
2

我在ASP新手,我遇到的最糟糕的噩夢開發商:我已經收到了解僱工人巨大的ASP.NET項目,我必須做出一些關於它的變化。其中一項變化是防止在同一個Active Directory登錄(不同的標籤,瀏覽器等)上打開同一站點幾次...) 正如我注意到應用程序正在使用會話。任何想法使用會話來防止同一網站的多個實例?ASP.NET:如何防止並行打開同一站點幾次?

+5

呃....你爲什麼會打破因特網起作用的方式? **不要**嘗試阻止用戶進行多個瀏覽器會話。修復你的應用! – 2012-02-22 09:35:34

+0

其安全原因需要,不幸:/ – 2012-02-22 10:08:33

+0

「出於安全原因」......聽起來像安全問題正在接近錯誤。不要建立失敗。 – snemarch 2012-02-22 11:15:13

回答

1

這是一個想法。使用GUID的隱藏字段,每次頁面加載時服務器都會隨機生成GUID。當請求到達服務器時,它會檢查GUID是否是上次生成的內容。如果它不同或爲空(當會話處於活動狀態時) - 重定向到某個頁面,表示訪問被拒絕(這裏沒有新的GUID)。如果它是正確的,請提供請求的頁面。這樣做的一個小問題是,如果有人關閉瀏覽器並重新打開瀏覽器,他/她在嘗試再次使用您的應用時會被拒絕訪問。要最大限度地減少會話超時到1分鐘,並使用AJAX asp:Timer保持會話活躍。請記住排除GUID生成/驗證管道中的保持活動調用(以及任何其他AJAX調用)。當然,會話結束會重置進程。此外,鼓勵用戶正確註銷也是一件好事。

這是落實雖然它在保護不是永久性連接的水平較弱的相對簡單的解決方案。對於非技術型終端用戶來說應該足夠了 - 取決於你的「受衆」。但即使對於知道這種機制的人來說,也會使得使用兩個應用程序的「實例」相當困難。

做,如果你真的需要。一般來說,我同意馬克認爲,網絡應用不應該受到這種限制。也許這是一個可以接受教育的人的要求?

1

你只需要創建從每個頁面的持久連接。如果瀏覽器在單個選項卡上從一個頁面導航到另一個頁面,那麼您將始終擁有單個持久連接。如果您從同一用戶獲得兩個並行持久連接,則用戶打開一個新選項卡。

在母版頁頁腳中添加一個腳本,它不會結束其反應(像長輪詢)頁面上的一個AJAX調用服務器。如果另一個Ajax呼叫來自同一用戶,而最後一個連接,則這是第二個選項卡。

您可能要結帳SignalR的持久連接的東西。它應該能夠根據瀏覽器功能在網絡套接字或長輪詢之間切換。

0

您不能防止被加載在多個瀏覽器標籤或一次性的URL,因爲這是客戶端發起的進程。

您可以實現持久connnection(由哈桑·汗的建議),以確保只有一個瀏覽器窗口可以同時處於活動狀態。我會補充說,當打開一個新窗口時,你可以警告用戶他們已經有了一個開放的連接。如果他們選擇使用新連接,那麼您會向舊連接(不同瀏覽器,選項卡等)發送消息,以使其清除該用戶的瀏覽器窗口。