2014-12-24 46 views
-1

在我用C#.net構建的WebApp中,我想讓用戶只能從一臺電腦連接。 所以當用戶登錄,在我第一次將節省電腦的詳細信息,當我將檢測時,其另一臺PC,他們將無法登錄允許用戶只從一臺電腦登錄

我試圖做:

1)保存ip時用戶首次登錄並檢查它是否每次登錄,的問題:的ip可以更改。

protected string GetIPAddress() 
{ 
    System.Web.HttpContext context = System.Web.HttpContext.Current; 
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

    if (!string.IsNullOrEmpty(ipAddress)) 
    { 
     string[] addresses = ipAddress.Split(','); 
     if (addresses.Length != 0) 
     { 
      return addresses[0]; 
     } 
    } 

    return context.Request.ServerVariables["REMOTE_ADDR"]; 
} 

2)保存在本地存儲一些關鍵那就要檢查一下按鍵的每個登錄,問題:他們可以清除本地存儲或選擇不使用它,或者瀏覽器將不支持本地存儲。

localStorage.setItem("key", "123123"); 

有一個很好的和安全的方法來做到這一點?

+2

您的要求在邏輯層面上沒有意義。這是否意味着只要我運行你的軟件,我就不能購買新的PC?理論上你可以這樣做,但不能通過瀏覽器。您無法獲得將機器識別爲不易僞造的機器的基本系統細節。再想想你的需求。 – nvoigt

+0

我的辦公室裏有20臺機器,他們都會向您展示相同的IP地址(NAT)......瀏覽器現在可以跨機器快速同步本地存儲數據/ Cookie。也許你可以解釋*爲什麼*你想這樣做?如前所述,這是一個非常奇怪的要求。 –

+1

我很想知道,爲什麼我們要重新設計一個基於瀏覽器的應用程序到窗口應用程序? – Anil

回答

0

雖然我@nvoight,這是一個非常奇怪和可疑計劃達成一致,這就是你能有點使它發揮作用的一種方式:

在服務器端,有一個數據庫表(或某種形式的存儲)將用戶名映射到「令牌」。用戶第一次登錄時,隨機生成一個令牌,使用適當的用戶名將其存儲在數據庫中,併發送包含該令牌的HTTP響應的cookie。從那時起,只要用戶嘗試登錄,請檢查cookie是否與數據庫中的令牌相匹配。

但是,這種方法存在一些明顯的問題,例如,如果用戶刪除Cookie(就像您提到的從localStorage中刪除)一樣。在這種情況下,他們再也不能通過任何計算機登錄,而無需聯繫您刪除服務器端的記錄。同樣,同一個用戶可能會嘗試從同一臺機器上的不同瀏覽器登錄,這是行不通的。另外,除非您通過HTTPS提供此站點,否則Cookie將以純文本格式發送,並且可能會輕易被同一網絡上的其他用戶劫持。

所以,是的,你可以湊齊一些可能有用的東西,但這可能是一件壞事,你可能只找到解決方案,讓你成爲那裏的一部分。

0

mac地址唯一標識一臺計算機,您應該能夠使用它來拒絕/允許連接。

訣竅是它不能從JavaScript讀取,所以你需要一些在瀏覽器的沙箱外執行的代碼來找到它 - 一個Java applet可以工作。

這是kludgey,因爲這是一個奇怪的要求。爲什麼這是一個Web應用程序,如果它只能在一臺計算機上運行?

0

如果你想要每臺PC付費,那麼WebApp是錯誤的技術。 瀏覽器的構建方式並非如此。 請更改許可模式或技術。 如果您想要每臺PC付費,那麼您需要一個激活的胖客戶端。