iT邦幫忙

0

PHP 除了 IP 以外的唯一值

php

有的 server 的連結方式會導致 $_SERV ER['REMOTE_ADDR'] 抓到 internal 的 ip
在不使用 session 以及 cookie 的情況下有類似 ip 的唯一值嗎

2 個回答

14
raytracy
iT邦大神 1 級 ‧ 2011-12-31 15:19:34
最佳解答

IP 與客戶身分不可能有唯一的對應值, 因為現在絕大部分上網方式, 都是透過 NAT 分享, 不管內部有多少 IP, 對外只以單一 IP 方式上網.

例如: 一家有 600 個員工的企業, 上網全部透過防火牆上的 NAT, 防火牆上只使用一個對外的 Public IP, 所以, 即使這 600 名員工都來看你的網站, 如果你用外部 IP 來辨識的話, 所有人都只會得到一個相同的 IP, 你完全無法用 IP 來辨認.

正確的作法, 應該是自行對 Browser 寫入 Session GUID, 由於 GUID 是你自己產生的, 你的程式可以確保, 每個人所記載的 GUID 都不相同, 這樣才能辨認每一個人.

這樣的辨識方法已經行之有年(應該有十幾年了吧?), 請搜尋網路上的相關文件便知.

chan15 iT邦新手 5 級 ‧ 2012-01-01 10:43:01 檢舉

多謝熱心回應,您說的事項我了解
但 session 可以關閉重來,cookie 可以清
所以為了正確性,在知情的狀況下還是以 ip ,為主
但遇到我上面說的狀況目前無解

wiseguy iT邦超人 1 級 ‧ 2012-01-01 12:03:24 檢舉

如果樓主認為
『session 可以關閉重來,cookie 可以清』
那為什麼不 care 一般使用 ADSL 的人斷線重連會換 IP 的 issue?
一般的 Web 站台識別身份就是用 cookie 來記錄 session
google、yahoo、facebook ... 都這麼做,他們也沒覺得有什麼不對啊
因為他們早就明白使用 IP 當唯一值,就是會遇到樓主目前的問題吧

chan15 iT邦新手 5 級 ‧ 2012-01-01 21:26:55 檢舉

當然怎麼做都有辦法找漏洞
但我想關閉瀏覽器重開就可以投票跟重新撥接才可以投票
我想前者應該是簡單多了

他們用 cookie 是沒有問題的,因為他們要讓 user 便利登入
如果 user 要清除 cookie 是他家的事,我的 case 是相反
其實要註冊跟驗證 Email 是最好的方式啦,但有些活動就是不願意做

2
afgn
iT邦新手 5 級 ‧ 2012-01-06 10:46:42

建議用 session,讓瀏覽器和網站自己去建立連線id,這不就結了?也不用擔心User清cookie或刪除cookie,只要user不關瀏覽器,就會一直存在。

當然還有一個更棒的唯一值,就是使用者帳號,因為你的程式可以控制每個人的帳號不會重覆(註冊時從資料庫去比對)就好啦。

我要發表回答

立即登入回答