CakePHP не сохраняет мои куки - PullRequest
3 голосов
/ 14 января 2012

В моем контроллере пользователей я пытаюсь включить функцию запомнить меня при входе в систему.Это кажется довольно простым - установить cookie-файл для поиска cookie-файла, когда пользователь заходит на страницу входа в систему, и, если он существует, войдите в него. Однако Cake не сохраняет cookie-файл, по крайней мере, не так, как я вижу, и когда я снова посещаю страницу, яя не авторизован автоматически.

Чтобы проверить это, у меня есть следующий код:

$cookie=$this->read('Auth.User');
if(empty($cookie) and !empty($this->data)){
    if($this->Auth->login()) {
        if(!empty($this->data['User']['remember_me'])){
            $cookie = array('id' => $this->Auth->user('id'),
            );
            $expires=strtotime($this->appConfigurations['remember_me'],time());
            $this->Cookie->write('Auth.User', $cookie, false, $this->appConfigurations['remember_me']);
        }
    }
}

Теперь, сразу после того, как я установил этот файл cookie, я могу поместить $ this-> cookie-> read ('Auth.User');и получить значение этого файла cookie, однако он не отображается в списке файлов cookie браузеров (Chrome, FireFox).

Если я использую обычные файлы cookie PHP, через setcookie () я могу просмотреть файл cookie, но, разумеется,чтение Cake Cookie не работает с этими куки.Что я должен искать, чтобы решить эту проблему?

Я нашел обходной путь, но мне это не нравится, потому что он просто обходит рамки.Я узнал, как торт создает куки, и для этих куки я использую алгоритм создания куки тортов в своем коде и использую setcookie () для настройки.Просто для тех, кто хочет или должен использовать обходной путь:

$cookieValue=$this->Auth->user('id');
setcookie('CakeCookie[Auth][User]',$cookieValue,$expires,'/');

Теперь вы можете использовать компонент cookie cakes для считывания значения.Есть еще что-то, что вы должны изменить, если ваше значение является массивом, прочитайте код cookie.php, чтобы увидеть, что вам нужно сделать.Также я пропустил шифрование, которое тоже можно найти в файле cookie.php и в настройках ваших приложений.Для этой проблемы мне не нужны значения массива, так как я храню только идентификатор пользователя.и я установил шифрование в отличие от описанного выше.

Я все же хотел бы знать, почему компонент не работает.

1 Ответ

1 голос
/ 18 января 2012

Следующее действие входа в систему мне подходит:

function login() {
    $cookie = $this->Cookie->read('Auth.User');
    debug($cookie); // Just a test
    if ($this->Auth->user('id')) {
        if(!empty($this->data)) {
            $cookie = array(
                'username' => $this->data['User']['username'],
                'password' => $this->data['User']['password']
            );
            $this->Cookie->write('Auth.User', $cookie, false, '+2 weeks');
        }
        $this->redirect('/');
    }
    elseif (!empty($cookie)) {
        if ($this->Auth->login($cookie)) {
            $this->redirect('/');
        }
    }
}

Это работает на вашей стороне?

...