2013年9月4日 星期三

[轉貼] 取得正確的Client端IP

出處:http://www.dotblogs.com.tw/jimmyyu/archive/2009/05/21/8493.aspx

在我們產品既有的程式中,有一段程式碼會去取得Client端的IP,主要用途是與ID一起作為識別使用者之用,因為為了方便使用者使用,我們的系統是允許不同使用者使用相同的帳號登入的,因此我們多加了IP這個key作為識別兩個同樣帳號的使用者,而以前程式的寫法是這樣:
1 string tClientIP = Request.ServerVariables["REMOTE_ADDR"].ToString();
過去在使用時都沒有遇到什麼問題,結果在近期卻發生在不同電腦上使用的兩個使用者,系統記錄到的IP竟然是相同的,這也導致兩個使用相同ID登入的使用者,彼此之間的使用者資訊會互相覆蓋,真是個大問題,上網查了一下發現,如果client端有設定代理伺服器的話,Request.ServerVariables["REMOTE_ADDR"]取到的會是代理伺服器的IP,這時候我們可以透過以下的程式判斷是否有代理伺服器:
1 Request.ServerVariables["HTTP_VIA"].ToString();
有設定代理伺服器的話,我們可以透過以下的語法取得Client真正的IP:
1 Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
如果沒有設定代理伺服器的話以上兩個內容值是空白的,以上資訊參考自:http://neural.cs.nthu.edu.tw/jang/books/webprog/06asp/request.asp?SessionCount=4
另外這邊有篇很比較深入的研究:http://hi.baidu.com/singsue/blog/item/febfb5af7214f4c97dd92a3c.html

沒有留言:

張貼留言