2013-04-23 4 views
0

У меня возникла следующая проблема. Я не могу войти в систему с помощью телефона. Если я использую телефон и поэтому система/библиотеки/Session.php строка 192 соответствует IP-адресу, возвращается FALSE для всего funciton sess_read(), поэтому я не могу войти с телефона.codeigniter сеанс с телефона - новый IP для каждой pageload

Странно, однако, что я смог войти в систему около 2 недель назад, когда показывал свое приложение своим друзьям. Все работает отлично с моего ПК. Проблема только в том, что входящий IP-адрес должен быть таким же, как и IP-адрес DB.

Неужели кто-нибудь из вас столкнулся с этим? Я использую самую последнюю версию Codeigniter версии 2.1.3. Я не хочу ничего жестко кодировать в Session.php, поскольку это основная библиотека.

Спасибо, Якуб

ответ

0

$config['sess_match_ip'] = FALSE; Набор

Если телефон меняется IP-адреса, то это из-под контроля КИ.

Если вы обязательно должны включить 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 
    */ 
} 
0

Хорошо, я написал эту функцию для приложения/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 не имеет значения, пытался ли кто-нибудь взломать ваши сеансы. Но мне нравится иметь функцию.

Если вы хотите использовать этот код, сделайте больше исследований о том, как должен быть большой диапазон $. Мой телефон находится в диапазоне + -2. Но фактический диапазон может быть другим. Если вы узнаете, напишите здесь.