2010-06-20 22 views
0

使用C#的Visual Studio 2008和SQL Server 2005如何限制網站的部分,使其一次只能由一臺計算機查看?

  • 一臺數據庫服務器。

  • 一個Web服務器

  • 三個客戶

  • 網頁名稱爲alpha。網站名稱是mysite

我希望一次只有一個客戶端可以查看頁面alpha。如果有人正在查看該頁面,而另一臺計算機上的另一臺計算機則嘗試查看同一頁面,則訪問被拒絕。

有沒有什麼辦法可以配置IIS,以限制連接到特定頁面的計算機?

是否有可能通過使用靜態類來實現此目的,以便只創建此類的一個實例,以及何時嘗試創建ERROR?

如何實現這一目標?

請注意,有很多頁面。我只想限制人們對此頁面的看法。

+5

這將是非常困難和容易出錯的。你爲什麼需要這樣做? – 2010-06-20 21:13:36

回答

3

有沒有內建的限制,你描述的方式,我不知道什麼靜態類應該幫助。

我會使用application variable,存儲第一個客戶端的IP地址和某種超時時間,並在您希望以此方式保護的頁面上設置/檢查此項。

+0

這個想法有幾個有趣的問題(雖然它幾乎是唯一的選擇)。假設你只計算IP地址,那麼代理服務器/ NAT可以繞過這個塊。如果您依賴某個Cookie /會話令牌以及超時時間,如果您在不結束會話的情況下關閉瀏覽窗口(直到超時過期),則您可以自行拒絕服務。這些並不意味着對此答案的否定,而是對要求的解決方案。 – 2010-06-20 20:27:51

4

由於您無法將頁面的刷新與打開另一個選項卡的同一瀏覽器區分開來,因此我沒有看到任何方法可以使此類方案有效。

爲什麼你需要這個?也許還有其他更好的選擇?

2

簡短的回答是:我認爲你不能這樣做。

並非如此簡短的答案是:您可以通過檢查Request.UserHostAddress來檢查請求來自哪個計算機/ IP地址,將此IP地址臨時存儲在「某處」,並防止再次將頁面顯示到相同的IP地址。但也有一些問題,這樣的做法:

  • 你將必須清除「活躍」的客戶端IP地址列表中的某個
  • 你將不能夠如果他們後面來區分不同的用戶/計算機防火牆/代理/等(他們將顯示相同的IP地址到您的網絡應用程序)
1

我想理論上是有可能的。

你可以用身份驗證+ cookies + javascript來做到這一點。

使用身份驗證來讓用戶登錄併爲每個用戶維護已經提供頁面的狀態。在該瀏覽器中設置一個cookie,以便不必再次登錄。

現在,您可以在javascript中使用onUnLoad事件(或其他任何或AJAX作爲保持活動+擦除DOM)來清除(或維護)該用戶特定頁面的狀態。

每當用戶請求頁面時,檢查他是否已登錄並打開該頁面。如果狀態顯示他已將其打開,則可以拒絕併發視圖。如果他使用不同的瀏覽器,則可以要求重新登錄,因爲缺少cookie等。

當然,其他約束可能會阻止您使用此功能。

聲明:我沒有嘗試過,我可以有辦法解決這個問題。

+0

儘管這種方法可能在單個瀏覽器中工作,但它不會限制在單獨瀏覽器中的併發訪問,因爲每個瀏覽器都有自己的Cookie存儲,並且由於它們處於單獨的進程中,因此它們完全分離了不能與彼此。 – 2010-06-20 22:07:50

+0

@Dave:如果用戶使用不同的瀏覽器,則需要讓用戶重新登錄。您已經知道他使用其他瀏覽器/計算機登錄。我不明白爲什麼這不起作用。這裏沒有關於不同javascript環境交互的假設。事實上,這種方法甚至可以在不同的計算機上工作!狀態數據位於服務器中,而不是客戶端。 – 2010-06-20 22:12:49

0

執行此操作的低效方法可能是將每個用戶的ip和當前頁面放入數據庫中,然後針對該ip的所有後續請求進行查詢。將onUnload事件添加到每個從數據庫中刪除未加載頁面的頁面。

相關問題