来自手机的codeigniter会话 - 每个页面加载的新IP

时间:2013-04-23 10:04:42

标签: codeigniter session

我遇到了以下问题。我无法使用手机登录我的系统。当我使用手机时,有4个IP地址的结尾范围,因此系统/ libraries / Session.php第192行IP匹配对于整个功能sess_read()返回FALSE,因此我无法从手机登录。

但奇怪的是,当我向朋友展示我的应用程序时,我能够在2周左右登录。我的电脑一切正常。唯一的问题是传入的IP必须与DB IP相同。

你们有没有遇到过这个?我使用最新的codeigniter版本2.1.3。我不想将任何东西硬编码到Session.php,因为它是一个核心库。

谢谢,Jakub

2 个答案:

答案 0 :(得分:0)

设置$config['sess_match_ip'] = FALSE;

如果手机正在更改IP,则它不受CI的控制。

如果您必须启用sess_match_ip,您可以选择在配置文件中添加一些逻辑,以便根据具体情况将s​​ess_match_ip设置为true / false。

$config['sess_match_ip'] = has_changing_ips();

function has_changing_ips()
{
    /**
     * Code to return true if normal or
     * return false if phone or other device with changing IPs
     */
}

答案 1 :(得分:0)

好的,我已经为app / config / config.php写了这个函数:

$config['sess_match_ip'] = match_ip(3);

// $range sets -+ of the last numbers
function match_ip ($range){

   session_start();
   $IP = $_SERVER['REMOTE_ADDR'];
   $IP_parts = explode(".", $IP);

   if (isset($_SESSION['mi'])){

     //If the last part is the same, match IP
     if ($_SESSION['mi'] == $IP_parts['3']){

        return TRUE; // SAME IP doesn't cause the problem, therefore TRUE
     }
     // If the last ending($_S[mi]) is +- 3, IP is dynamic, therefore FALSE
     if (($IP_parts['3']-$range <= $_SESSION['mi']) && ($_SESSION['mi'] <= $IP_parts['3']+$range)) {

        return FALSE;
    }
    else{

        return TRUE;
    }
   }
   // If session not set, set it.
   else{

    $_SESSION['mi'] = $IP_parts['3'];

   }

}

我知道ip6v的问题,但就我的目的而言,这应该有效。关于安全性 - 在一天结束时,我将一些东西存储在一个未加密的会话中。但是IP地址真的很容易伪造,因此如果有人试图破解你的会话,即使[&#39; sess_match_ip&#39;] = TRUE也不重要。但我喜欢这个功能。

如果您想使用此代码,请进一步研究$ range的范围。我的手机电话范围是+ -2。但实际范围可能不同。如果您发现,请在此处发布。