2014年5月16日星期五

Zen-cart 使用反向代理后后台whos_online功能的修正

如果Zen-cart程序放置在反向代理服务器之后,后台whos_online功能显示的都是前端方向代理服务器的IP,那么这样就无法分辨有多少个人在线了。目前最常用的反向代理当数Nginx了,在配置中一般使用如下指令:
proxy_set_header X-Forwarded-For $remote_addr;
它把当前的真实访问的IP通过X-Forwarded-For传递给后端服务器,这样后端就可以记录下真实的IP。
Zen-cart中后端的whos_online功能获取IP是在includes/functions/whos_online.php文件中实现的,所以需要修改一下这个文件,主要判断如果存在X-Forwarded-For这个值,就使用它来作为真实IP:
//新增加的函数,用来判断是否是合法的IP
function is_ip($str) {
 $ip = explode(".", $str);
 if (count($ip) < 4 || count($ip) > 4) return 0;
 foreach($ip as $ip_addr) {
  if ( !is_numeric($ip_addr) ) return 0;
  if ( $ip_addr < 0 || $ip_addr > 255 ) return 0;
 }
    return (preg_match("/^([0-9]{1,3}\.){3}[0-9]{1,3}$/is", $str));
}
//修改function zen_update_whos_online()函数,把“$wo_ip_address = (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'Unknown');”使用如下代码替代:
//////////////////////////
$r = '';
$x = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
for ($i=0;$i
这里只要修改其获取正确IP地址即可,接下来统计多少客户在线、重复IP和非重复客户是基于IP和会话ID的。至此,后台whos_online功能修改完毕。

没有评论:

发表评论