CakePHP 3.8 - удаление файлов cookie - PullRequest
0 голосов
/ 26 сентября 2019

Я пытался установить автоматическое включение для каждого Cookie, но не могу удалить Cookie с помощью функции, показанной в CakePHP Books .

У меня есть функция входа в систему, которая проверяет «постоянство», то есть флажок «Запомнить меня».Если флажок установлен, создайте Cookie, сгенерируйте ключ, назначьте его пользователю и отправьте с ответом:

UsersController :: login ()

if ($this->request->getData('persistence')) {
  $cookie = $this->Users->createLoginCookie($user, '+1 Month');

  $this->response = $this->response->withCookie($cookie
  );
}

return $this->redirect($this->Auth->redirectUrl());

UsersTable :: createLoginCookie ();

public function createLoginCookie($user, $expiry){
  $key = Text::uuid();
  $user = $this->findByEmail($user['email'])->first();
  $user->persistence_key = $key;
  $this->save($user);

  $cookie = new Cookie(
    'persistence_key', $key,
    new DateTime($expiry),
    '',
    '',
    false,
    false
  );
   return $cookie;
}

И я хочу, чтобы Cookie был удален, если пользователь выходит из системы вручную:

UsersController:: logout ()

if ($cookie = $this->request->getCookie('persistence_key')) {
  $this->response = $this->response->withExpiredCookie($cookie);
}
$this->Flash->success('You have been logged out.');
return $this->redirect($this->Auth->logout());

К сожалению, Cookie не будет удален.

Есть идеи?

1 Ответ

0 голосов
/ 27 сентября 2019

Ваш код $cookie = $this->request->getCookie('persistence_key') возвращает значение файла cookie, а не сам файл cookie.Таким образом, вы передаете значение cookie в метод withExpiredCookie() вместо имени cookie.И в любом случае, передача имени файла cookie теперь не рекомендуется.

Что-то вроде этого должно работать:

$cookie = new Cookie('persistence_key');
$this->response = $this->response->withExpiredCookie($cookie);

Обратите внимание, что путь к файлу cookie также должен соответствовать способу создания файла cookie.Поскольку у меня есть много приложений CakePHP на локальном хосте, я склонен указывать путь куки при создании куки:

$cookie = new Cookie('my-cookie');
$cookie = $cookie->withPath(Router::url('/'));

Поэтому я должен уничтожить их следующим образом:

$cookie = new Cookie('my-cookie');
$cookie = $cookie->withPath(Router::url('/'));
$this->response = $this->response->withExpiredCookie($cookie);
...