2015-12-04 2 views
0

Я создал простой вход в codeigniter, где пользователь вводит свое имя пользователя и пароль, и если он действителен, перейдите на некоторую защищенную страницу. На защищенной странице есть ссылка, называемая logout. Но проблема в том, что после выхода из системы, если я напрямую обращаюсь к защищенной странице, она не перенаправляется на страницу входа.Данные сеанса не очищены в кодеигниторе

моя защищенная страница содержит

<?php 
    if (!isset($this->session->userdata['loggedin'])) { 
     redirect("login"); 
    } 
?> 
Welcome Dear!! 
<a href="login/logout">Logout</a> 

Я устанавливал данные сессии после успешного верительных пользователя.

//set the session variables 
$sessiondata = array(
    'username' => $username, 
    'loggedin' => TRUE 
); 
$this->session->set_userdata($sessiondata); 
redirect('admin'); 

В методе выхода из системы (Логин мой контроллер) Я незадана сессионные данные, такие как this-

// Removing session data 
    $sess_array = array(
    'username' => '', 
    'loggedin' => FALSE 
    ); 
    $this->session->unset_userdata($sess_array); 

Но после выхода из системы, когда я получить доступ непосредственно к странице администратора (защищаемой) не перенаправляют на страница авторизации.

После выхода из системы я отлаживал это на странице входа и показывает уже сохраненное значение сеанса.

echo $this->session->userdata['username']; 

но когда я использую метод выхода из системы, он отлично работает.

$this->session->sess_destroy(); 

Может ли кто-нибудь сказать мне, почему это произошло? Не работает unset_userdata, или я сделал что-то неправильно? Заранее спасибо.

+0

проверить, работает ли мой ответ –

ответ

1

Хорошо, я разрешаю эту проблему. Проблема в том, что codeigniter не принимает массив пар при снятии данных сеанса. т.е.

Я использовал этот код на мой APPLICATION-

// Removing session data 
$sess_array = array(
'username' => '', 
'loggedin' => FALSE 
); 
$this->session->unset_userdata($sess_array); 

Но CodeIgniter не поддерживает это сейчас. Я изменил этот код с помощью этого кода ниже

// Removing session data 
$sess_array = array('username','loggedin'); 
$this->session->unset_userdata($sess_array); 

Теперь он отлично работает.

rEF- https://www.codeigniter.com/user_guide/libraries/sessions.html

**In previous versions, the unset_userdata() method used to accept an associative array of key => 'dummy value' pairs. This is no longer supported.** 
1

Там проблема в обработке сессии в CodeIgniter функциональность:

$sess_array = $this->session->all_userdata(); 
    foreach ($sess_array as $key => $val) { 
     if ($key != 'session_id' && $key != 'last_activity' && $key != 'ip_address' && $key != 'user_agent') 
      $this->session->unset_userdata($key); 
    } 
+0

Я видел это решение. Я могу установить его через официальные документы. Но спасибо за ваш код. –

-1

Над ответом Ashis Biswas прекрасно, и вы также должны позаботиться о том, вы должны проверить ваши сеанс входа в контроллер, как и в кодеригнере, вы получаете доступ к своей функции контроллера вместо просмотра. если вы будете проверять и перенаправлять на страницу просмотра, которая не будет перенаправляться на ваш контроллер входа, даже если у вас отключены данные сеанса.

Смежные вопросы