Проблемы с сессией Codeigniter - PullRequest
2 голосов
/ 14 января 2012

Я создал аутентификацию пользователя, используя потрясающую библиотеку аутентификации codeigniter ion auth в моем приложении codeigniter, аутентификация работает нормально, но когда я выхожу из системы и нажимаю кнопку возврата в браузере, я могу просмотреть все страницычто я посетил в своем приложении, что вызывает беспокойство по поводу конфиденциальности пользователя, но если я пытаюсь обновить страницу, он узнает, что я вышел из системы.Как заставить браузер перезагрузиться, когда пользователь нажимает кнопку «Назад» браузера?Будем благодарны за любые предложения по решению этой проблемы ..

РЕДАКТИРОВАТЬ

Функция выхода из контроллера

function logout() {
    //log the user out
    $logout = $this->ion_auth->logout();

    //redirect them back to the page they came from
    redirect('auth', 'refresh');
}

Это функция выхода из ion auth

public function logout() {
    $this->ci->ion_auth_model->trigger_events('logout');

    $identity = $this->ci->config->item('identity', 'ion_auth');
    $this->ci->session->unset_userdata($identity);
    $this->ci->session->unset_userdata('group');
    $this->ci->session->unset_userdata('id');
    $this->ci->session->unset_userdata('user_id');

    //delete the remember me cookies if they exist
    if (get_cookie('identity')) {
        delete_cookie('identity');
    }
    if (get_cookie('remember_code')) {
        delete_cookie('remember_code');
    }

    $this->ci->session->sess_destroy();

    $this->set_message('logout_successful');
    return TRUE;
}

Я использую codeigniter 2.0.3

Заранее спасибо ..

Ответы [ 3 ]

6 голосов
/ 14 января 2012

Скорее всего, они фактически вышли из системы (как вы говорите, при обновлении они выглядят отключенными).Вероятно, браузер кэшировал HTML-код, который отображается, указывая на то, что он вошел в систему, но не перезагружает его после того, как вышел из системы.

Вы можете настроить страницы, на которых есть информация, связанная с входом, вбез кэширования путем установки заголовка Cache-Control.

Этого можно достичь с помощью HTML

<META Http-Equiv="Cache-Control" Content="no-cache">
<META Http-Equiv="Pragma" Content="no-cache">
<META Http-Equiv="Expires" Content="0">

или PHP

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

Вы также можете реализовать хакерские и нежелательныеочистка истории пользователя для этого конкретного окна с помощью следующего кода.Это необходимо отправить в браузер как часть функции выхода из системы и не будет работать, если у пользователя отключен JavaScript.

<script language="javascript"> 
     var Backlen=history.length;   
     history.go(-Backlen);   
     window.location.href=page url
</SCRIPT>
1 голос
/ 20 февраля 2013

Я настоятельно не рекомендую отключать кеширование, так как это снизит скорость вашего приложения.У меня была такая же проблема из-за глупого кодирования, то, что я делал, было в моих контроллерах, я помещал следующий код в верхней части каждой функции, которая взаимодействовала с базой данных, используемой пользователями в состоянии входа в систему:

//Do not let anyone interact with database from cached pages!
    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    }

Таким образом, происходит перенаправление на страницу входа в систему, что также означает обновление, если браузер пользователя, вышедшего из системы, был "зарезервирован" в кэшированном состоянии, вошедшем в систему, и попытался возиться с базой данных.

0 голосов
/ 30 апреля 2013

да, у иона с аутентификацией есть эта проблема, я столкнулся с той же проблемой в моем приложении. Еще одна проблема заключалась в том, что если сеанс истекает по какой-либо ссылке, он берет вас на страницу входа. но когда вы вошли в систему и пытаетесь получить доступ к последней ссылке, когда сеанс истек, он всегда возвращает вас на страницу входа. Для доступа к странице вам необходимо очистить кеш браузера. Вот решение, которое я нашел на GitHub комментарии на Ion Auth

ссылка на комментарий github ion-auth

function logout() {
    //log the user out
    $logout = $this->ion_auth->logout();

     header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
     header("Expires: Wed, 4 Jul 2012 05:00:00 GMT"); // Date in the past

    //redirect them back to the page they came from
    redirect('auth', 'refresh');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...