Intereting Posts
PHP ограничивает вызов публичных методов Неустранимая ошибка: вызов неопределенного метода mysqli_stmt :: query () Как сохранить значения моих входов каждый раз, когда я обновляю свою страницу? Определить конечное назначение сокращенного URL-адреса в PHP? Сообщения WordPress в столбцах Чтение RAW-данных из запроса Flash POST (изображения) Не удается заставить mysql_insert_id () работать Правильно использовать классы в других классах в php? Как получить адрес gzip в виде ответа PHP Анализ файла CSS с помощью PHP Объявление глобальной переменной с помощью php.ini Сумма столбцов в многомерном массиве без циклов Как найти первый / второй элемент ассоциативного массива, когда ключи неизвестны? Обработка ввода с помощью Zend Framework за пределами MVC Обрезаемая фатальная ошибка: объект класса PDOStatement не может быть преобразован в строку в /home/refined/public_html/refer.php в строке 30

Выход из системы

У меня есть 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');