Как использовать значение cookie глобально в версии cakephp 4?

#cookies #setcookie #cakephp-4.x

Вопрос:

Я хочу установить значение cookie в одной функции, и их значение будет использоваться везде в версии cakephp 4. В настоящее время я могу использовать значение cookie внутри единственной функции , для которой я установил их значение.

  • Я могу получить значение файла cookie в функции index (), но я не могу получить значение файла cookie в функции viewusers (). Код здесь :

использовать приложениеКонтроллерAppController;

используйте ТортHttpCookieCookie;

используйте коллекцию CakeHttpCookieCookieCollection

используйте дату и время;

класс AdminController расширяет AppController {

 function index(){
 $cookie = array();
 $cookie['admin_username'] = $requestData['username'];
 $cookie['admin_password'] = $requestData['password'];
 $cookies = new Cookie('AuthAdmin',$cookie, new DateTime(' 1 weeks'));
 $response = $this->response->withCookie($cookie);
 return $this->redirect('admin/viewusers');
}

function viewusers() {
$cookies = new CookieCollection();
$data = $cookies->get('AuthAdmin');
print_r($data);
// cookie value not found in $data variable.
$response = $this->response->getCookie('Auth.Admin');
print_r($response);
// cookie value not found in $response variable.
}
 

}

  • Я могу получить значение файла cookie в функции index (), но я не могу получить значение файла cookie в функции viewusers ().

Комментарии:

1. Вы имеете в виду, что хотите установить и затем использовать его в других функциях во время того же запроса (например, установить его в контроллере, а затем ссылаться на него в шаблоне)? Или установить его в одном запросе, а затем ссылаться на него в последующих запросах (например, установить его при входе пользователя в систему, а затем снова ссылаться на него позже при просмотре или редактировании записей)? И, пожалуйста, поделитесь кодом, который вы используете для установки файла cookie.

2. Код здесь : класс AdminController расширяет AppController { индекс функции(){ $cookie = массив(); $cookie[‘имя пользователя администратора’] = $requestData[‘имя пользователя’]; $cookie[‘пароль администратора’] = $requestData[‘пароль’]; $cookie = новый файл cookie(‘AuthAdmin’,$cookie, новая дата и время(‘ 1 неделя’)); } пользователи просмотра функций() { $cookie = новая коллекция cookiec(); $данные = $cookie->получить(‘AuthAdmin’); print_r($data); // значение файла cookie не найдено в переменной $data. } } Я могу получить значение файла cookie в функции index (), но я не могу получить значение файла cookie в функции viewusers ().

3. Вы создали объект Cookie. Вы не добавили его в ответ. Но размещение такого рода информации в файле cookie-это очень плохая практика обеспечения безопасности! Возможно, вы хотели написать это на сессии вместо этого?

4. Я попытался добавить его в ответ, но все равно получаю нулевое значение файла cookie. Добавлен ответ, например : $response = $this->response->>withCookie($cookie); и получите значение cookie, например : $this->>>ответ->>>>getCookie($cookiename);

5. Вы вернули этот новый объект ответа от своего контроллера? И вы ДЕЙСТВИТЕЛЬНО уверены, что хотите отправлять файл cookie с паролем пользователя в нем?

Ответ №1:

Попробуй это:

 function index(){
    $cookie = array();
    $cookie['admin_username'] = $requestData['username'];
    $cookie['admin_password'] = $requestData['password'];
    $cookies = new Cookie('AuthAdmin',$cookie, new DateTime(' 1 weeks'));
    return $this
        // redirect returns a response object, so you can chain the cookie call onto that
        ->redirect('admin/viewusers')
        // Note that this uses $cookies, not $cookie
        ->withCookie($cookies);
}
 

Но опять же, я не могу достаточно сильно подчеркнуть, что отправка файла cookie с именем пользователя и паролем в нем-очень плохая вещь с точки зрения безопасности.