2012-01-14 2 views
2

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

EDIT

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

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

Thanx заранее ..

+0

показать код ... Я уверен, вы не проверить на каждой странице для «вошел в» Thats probly почему, только сделал при входе в систему.Нужно проверять каждую страницу в вашей «защищенной области» – Jakub

+0

Я действительно проверяю ее, поэтому, когда я перезагружаю страницу, она перенаправляет меня на страницу входа в систему, похоже, что страница не перезагружается, когда кто-то выходит из системы –

+0

, может быть, вы не совсем выходите из системы , его трудно сказать без какого-либо кода, опубликуйте типичную настройку контроллера, поскольку у меня никогда не было этой проблемы с сеансами на CI. – Jakub

ответ

6

Скорее всего, они фактически вышли из системы (как вы говорите, освежающие причины выходят из системы). Вполне вероятно, что браузер кэшировал 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 

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

<script language="javascript"> 
    var Backlen=history.length; 
    history.go(-Backlen); 
    window.location.href=page url 
</SCRIPT> 
+0

Thanx много @Ben Swinburne .. это была проблема кэширования. Я достиг этого в codeigniter, добавив '$ this-> output-> set_header (« Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age = 0, post-check = 0, предварительно проверка = 0"); $ this-> output-> set_header ("Pragma: no-cache"); 'at constructor каждого контроллера, кроме контроллера аутентификации. –

+0

Попробуйте перенаправить функции взаимодействия с базой данных на уровне вашего контроллера вместо отключения кэширования. – serdarsenay

+0

@SamSamson: Я не понимаю, почему бы вам не кэшировать всюду, кроме «контроллера проверки подлинности». Я думаю, что ion_auth, как и все, использует сеансы. Поэтому в «контроллере проверки подлинности» не должно быть кэша. – neelabh

1

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

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

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

0

yes ion auth имеет эту проблему, я столкнулся с той же проблемой в своем приложении. Проблема anothr заключалась в том, что если сеанс истекает по любой ссылке, он переводит вас на страницу входа. но когда вы вошли в систему, и вы пытаетесь получить доступ к последней ссылке, в которой закончился сеанс, она всегда возвращает вас на страницу входа. для доступа к странице, необходимой для очистки кеша браузера. вот решение я нашел на GitHub комментарии на ионном AUTH

github ion-auth comment link

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'); 
} 
Смежные вопросы