#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 с именем пользователя и паролем в нем-очень плохая вещь с точки зрения безопасности.