如何在代理服务器环境中唯一识别远程机器,我使用了$ _SERVER ['REMOTE_ADDR'],但代理网络中的所有机器都有相同的IP地址,有什么办法
dec*_*eze 11
不要依赖来自客户的信息.在这种情况下,您遇到了简单的网络问题(您永远无法确定客户端的IP地址是否正确),在其他情况下,客户端可能会故意欺骗信息.
如果您需要唯一识别您的客户,请在第一次访问时给他们一个cookie,这是您可以做的最好的.
你最好的选择是:
$uid = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);
Run Code Online (Sandbox Code Playgroud)
但是,没有办法知道他们是否更改了用户代理或不同的浏览器.
您可以使用其他一些标头来提供帮助,例如这些标头(在查看转储时想到的标头$_SERVER):
HTTP_USER_AGENTHTTP_ACCEPTHTTP_ACCEPT_LANGUAGEHTTP_ACCEPT_ENCODINGHTTP_ACCEPT_CHARSET使用来自客户的多个信息将有助于区分不同的客户(您使用的信息越多,两个客户之间至少其中一个不同的机会就越大)...
...但这不会是一个完美的解决方案:-(
根据代理软件的类型及其配置,可能有一个名为 的标头X-Forwarded-For,您可以使用:
X-Forwarded-For (XFF) HTTP 标头是用于识别通过 HTTP 代理或负载均衡器连接到 Web 服务器的客户端的原始 IP 地址的事实上的标准。这是一个非 RFC 标准的请求标头,由 Squid 缓存代理服务器的开发人员引入。
但我也不会依赖它:它可能不会总是存在(不认为它是必需的)
祝你好运 !