У меня есть logout-контроллер в codeigniter:
<?php class Logout extends MY_Controller { function index() { $this->session->sess_destroy(); redirect('index.php'); } }
Это выводит меня из системы, но когда я вызываю другого контроллера после ведения журнала, например «/ site / addnewpost», это просто вводит меня в систему снова, как будто ранее не было уничтожено sassion. Почему это происходит?
Следуйте предложению ALex, но используя код CI :). Что я имею в виду, попробуйте разобрать каждую информацию сеанса отдельно. Я читал один раз о проблеме в версии 2.0.3, я думаю, но сейчас я не помню, и у меня нет времени искать ссылку. Однако это на их форуме, и предложение было одинаковым: каждый раз отключайте каждый элемент сеанса.
$this->session->unset_userdata('data_one'); $this->session->unset_userdata('data_two'); $this->session->unset_userdata('data_three'); $this->session->unset_userdata('data_one'); $this->session->sess_destroy(); redirect('home','refresh'); // <!-- note that //you should specify the controller(/method) name here
Вам нужно перенаправить, потому что сеанс CI – это просто файлы cookie, а не собственный массив php-сессии.
Другое дело … убедитесь, что ошибка не в ваших методах входа в систему, которая регистрирует вас независимо от того, успешно ли вы выходите из системы или нет!
Попробуйте явно удалить такие элементы:
$this->Session->delete('User'); $this->Session->destroy(); $this->Cookie->delete("User"); $this->Cookie->destroy(); $this->Auth->logout(); $this->redirect('whereever');
-$this->Session->delete('User'); $this->Session->destroy(); $this->Cookie->delete("User"); $this->Cookie->destroy(); $this->Auth->logout(); $this->redirect('whereever');
-$this->Session->delete('User'); $this->Session->destroy(); $this->Cookie->delete("User"); $this->Cookie->destroy(); $this->Auth->logout(); $this->redirect('whereever');
из$this->Session->delete('User'); $this->Session->destroy(); $this->Cookie->delete("User"); $this->Cookie->destroy(); $this->Auth->logout(); $this->redirect('whereever');
Моя проблема связана с кешированием на стороне сервера. Самое быстрое, что я мог исправить, это добавить случайный текст к ссылке выхода:
<?php $this->load->helper('string'); echo anchor('/home/logout/'.random_string(), 'logout'); ?>
home / logout содержит тот же код, что и function index
в вопросе.
Просто чтобы вы знали, что redirect('/', 'refresh')
не работает для меня, но я снова сделал быстрый тест.
Я предполагаю, что метод random_string()
может быть заменен выводом заголовков, которые вынуждают очищать кеш и т. Д. Как вы, наверное, догадались, я не могу сделать это прямо сейчас, поскольку я очень занят. Может быть позже.
Вы также можете попробовать вручную установить свой «logged_in» или все, что вы назвали сессией, на false. Затем, уничтожая все остальные данные сеанса.
$this->session->set_userdata('logged_in', FALSE); $this->session->session_destroy(); redirect('index');
сначала мы должны загрузить библиотеку сеансов для работы с сеансом, чем отключить sessionID и уничтожить сеанс. Я использую этот код для отмены сеанса и безопасного выхода из системы.
$this->load->library('session'); $this->session->set_userdata('user_id', FALSE); $this->session->sess_destroy(); $this->load->view('your URL');