0

我使用这个简单的脚本:

<script type="text/javascript">
var _mytrack = _mytrack || [];
_mytrack.push(['_setType', 'SOMETYPE']);
_mytrack.push(['_setEmail', 'john@johndoe.com']);

(function() {
var mytrack = document.createElement('script');
_mytrack.type = 'text/javascript';
_mytrack.async = true;
mytrack.src = ('https:' == document.location.protocol ? 'https://www' : 'http://www') + '.mytrack.net/tracker.tell.php?i='+_mytrack;
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(mytrack, s);
})();
</script>

我的 PHP 脚本 (tracker.tell.php) 如下所示:

header("content-type: application/javascript");
echo "alert('".$_SERVER['REMOTE_ADDR']."');";

现在问题与 相关,$_SERVER['REMOTE_ADDR']因为这(在 JS 警报中)提供了服务器的 IP,而不是客户端的 IP。

4

1 回答 1

3

$_SERVER['REMOTE_ADDR'] 确实为您提供了远程用户的 IP 地址。但如果您使用代理或负载均衡器,则应使用 $_SERVER['HTTP_X_FORWARDED_FOR']

如果用户可以直接或通过代理访问您的服务器,那么只需使用 if 语句

$remote_ip = (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']);

然后将变量传递给JS。

于 2013-10-22T14:26:04.043 回答