CakePHP Удалить проблему с cookie - PullRequest
4 голосов
/ 14 апреля 2011

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

Я написал cookie, когда пользователь аутентифицируется, что хранит некоторую базовую информацию о пользователе локально. Когда пользователь выходит из системы, я пытаюсь удалить переменную cookie, но она не удаляется. Если я использую метод уничтожения, тогда cookie удаляется, но мне любопытно, что я здесь делаю неправильно:

Cookie написано так и работает:

function login(){
    if($this->Auth->login($this->data)){
        $this->Cookie->write('User.email',$this->data['User']['email'],true, '1 day');
    }
}

Однако использование функции удаления не работает ...

function logout(){
    $this->Cookie->delete('User');
    if($this->Auth->logout($this->data)){
        //auto redirected
    }
}

Если я заменю delete на destroy, это сработает. Это не работает, потому что данные cookie зашифрованы? Я, вероятно, делаю что-то глупое, но я не могу понять это.

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

Спасибо!

1 Ответ

4 голосов
/ 14 апреля 2011

Просматривая источник, кажется, что это либо ошибка, либо предполагаемое поведение.

Класс CookieComponent имеет внутренний массив __values, который он использует для отслеживания информации о файлах cookie. Если вы вызываете delete ('User.email'), он удалит индекс 'User' из массива __values, включая все данные в индексе.

Тем не менее, он только удалит cookie с именем «Пользователь». В следующий раз, когда Cake запустится, он увидит, что cookie с именем «User.email» все еще существует, и загрузит его обратно в массив __values.

Предполагая, что это не запланированное поведение, я написал исправление и отправлю его в команду Cake.

...