转ecshop验证码错误问题

来源:互联网 发布:2016年1月非农数据 编辑:程序博客网 时间:2024/04/30 03:07

[原]ecshop验证码错误、禁用验证码登录自动退出


这是一个比较诡异的问题,经过无数次测试,发现是动态ip的问题。反应到程序是实际不是验证码的问题,而是session的问题。

解决方案是,修改includes/lib_base.php文件real_ip()函数,如下:

function real_ip(){    static $realip = NULL;    if ($realip !== NULL)    {        return $realip;    }    /* 添加以下代码 */    if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd'])){       $realip = $_COOKIE['real_ipd'];         return $realip;    }    /* 添加以上代码 */    if (isset($_SERVER))    {        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))        {            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);             /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */            foreach ($arr AS $ip)            {                $ip = trim($ip);                if ($ip != 'unknown')                {                    $realip = $ip;                    break;                }            }        }        elseif (isset($_SERVER['HTTP_CLIENT_IP']))        {            $realip = $_SERVER['HTTP_CLIENT_IP'];        }        else        {            if (isset($_SERVER['REMOTE_ADDR']))            {                $realip = $_SERVER['REMOTE_ADDR'];            }            else            {                $realip = '0.0.0.0';            }        }    }    else    {        if (getenv('HTTP_X_FORWARDED_FOR'))        {            $realip = getenv('HTTP_X_FORWARDED_FOR');        }        elseif (getenv('HTTP_CLIENT_IP'))        {            $realip = getenv('HTTP_CLIENT_IP');        }        else        {            $realip = getenv('REMOTE_ADDR');        }    }    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';/* 添加以下代码 */    setcookie("real_ipd", $realip, time()+36000, "/");    /* 添加以上代码 */    return $realip;}
0 0
原创粉丝点击