1

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

奇怪的是,大约 2 周前,当我向朋友展示我的应用程序时,我能够登录。在我的电脑上一切正常。传入 IP 必须与 DB IP 相同,这只是该条件的一个问题。

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

谢谢, 雅库布

4

2 回答 2

0

$config['sess_match_ip'] = FALSE;

如果手机正在更改 IP,那么它就超出了 CI 的控制范围。

如果您绝对必须启用 sess_match_ip,您也可以在配置文件中添加一些逻辑,以根据具体情况将 sess_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
     */
}
于 2013-04-23T16:38:23.013 回答
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 地址真的很容易伪造,因此即使 ['sess_match_ip'] = TRUE 也没有关系,如果有人试图破解你的会话。但我喜欢打开这个功能。

如果您想使用此代码,请对 $range 的大小进行更多研究。我的手机范围是+-2。但实际范围可能有所不同。如果您发现,请在此处发布。

于 2013-04-24T11:02:19.073 回答