【问题标题】:codeigniter session from a phone - a new IP for every pageload来自电话的 codeigniter 会话 - 每次页面加载的新 IP
【发布时间】:2013-04-24 19:08:37
【问题描述】:

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

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

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

谢谢,贾库布

【问题讨论】:

    标签: codeigniter session


    【解决方案1】:

    设置$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
         */
    }
    

    【讨论】:

      【解决方案2】:

      好的,我已经为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。但实际范围可能有所不同。如果您发现了,请在此处发布。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-23
        • 1970-01-01
        • 2013-10-02
        • 1970-01-01
        • 2019-11-04
        • 2021-11-09
        • 2019-11-07
        • 1970-01-01
        相关资源
        最近更新 更多