Выход из системы codeigniter - PullRequest
6 голосов
/ 23 декабря 2011

У меня контроллер выхода из системы в codeigniter:

<?php

class Logout extends MY_Controller {

    function index()
    {

        $this->session->sess_destroy();
        redirect('index.php');
    }
}

Это выводит меня из системы, но когда я вызываю другой контроллер после входа в систему, например "/ site / addnewpost", это просто регистрирует меня снова, как если бы страдание не было уничтожено ранее. Почему это происходит?

Ответы [ 5 ]

11 голосов
/ 23 декабря 2011

Следуйте предложению 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 - это просто куки, а не собственный массив сеансов php.

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

2 голосов
/ 23 декабря 2011

Попробуйте явно удалить элементы вроде этого:

$this->Session->delete('User');
$this->Session->destroy();
$this->Cookie->delete("User");
$this->Cookie->destroy();
$this->Auth->logout();
$this->redirect('whereever');
1 голос
/ 24 февраля 2015

Вы также можете попробовать вручную установить «logged_in» или то, что вы называли сессией в false.Затем, уничтожив все остальные данные сеанса.

    $this->session->set_userdata('logged_in', FALSE);
    $this->session->session_destroy();
    redirect('index');
1 голос
/ 23 января 2012

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

<?php
    $this->load->helper('string');
    echo anchor('/home/logout/'.random_string(), 'logout');
?>

home / logout содержал тот же код, что и function index в вопросе.

Просто чтобы вы знали, что redirect('/', 'refresh') у меня не сработало, но я снова сделал быстрый тест.

Я предполагаю, что метод random_string() можно заменить выводом заголовков, которые заставляют очищать кэш и т. Д. Как вы уже догадались, я не могу сделать это прямо сейчас, так как я очень занят. Может быть позже.

0 голосов
/ 28 июня 2017

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

$this->load->library('session');
$this->session->set_userdata('user_id', FALSE);
$this->session->sess_destroy();
$this->load->view('your URL');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...