CakePHP 3.5 Запись и шифрование файлов cookie
Справочная информация: я только что обновился до CakePHP 3.5.17.
У меня был код, который пишет cookie. Однако, кажется, что мне не хватает нескольких шагов, чтобы зашифровать его. Может кто-нибудь пролить свет, где пропущены шаги? В данный момент веб-браузер получает значение cookie, но он не зашифрован. Обратите внимание, что я также установил cookieKey в моем app.php
Я также включил эти шаги в ссылку ниже
https://book.cakephp.org/3.0/en/development/application.html
//In src/Controller/UsersController.php
use Cake\I18n\Time;
use Cake\Http\Cookie\Cookie;
use Cake\Http\Cookie\CookieCollection;
use Cake\Core\Configure;
use App\Application;
use Cake\Error\Middleware\ErrorHandlerMiddleware;
use Cake\Http\MiddlewareQueue;
use Cake\Routing\Middleware\AssetMiddleware;
use Cake\Routing\Middleware\RoutingMiddleware;
use Cake\Http\Middleware\EncryptedCookieMiddleware;
public function writecookie() {
$cookie = new Cookie(
'goodday', // name
'YES', // value
(Time::now())->modify('+1 year'), // expiration time, if applicable
'/', // path, if applicable
'', // domain, if applicable
false, // secure only?
true // http only ?
);
$middlewareQueue = new MiddlewareQueue();
$cookiesEncrypted = new EncryptedCookieMiddleware(
['goodday'],
Configure::read('Security.cookieKey')
);
$cookiesEncrypted = $middlewareQueue->add($cookiesEncrypted);
$this->response = $this->response->withCookie($cookie); //value is still YES in the web browser cookie storage
}
После дальнейшей отладки я заметил, что в классе EncryptedCookieMiddleware. Утверждается, что файлы cookie в данных запроса будут расшифрованы, а файлы cookie в заголовках ответов будут автоматически зашифрованы. Если ответ является Cake\Http\Response, данные cookie устанавливаются с withCookie()
и `cookie()``также будут зашифрованы. Но для меня это не автоматически шифровать?
1 ответ
Возможно, вы захотите ознакомиться с тем, как работают промежуточные программы, вы не должны использовать их в своем контроллере, они должны быть "обернуты" вокруг вашего приложения и взаимодействовать с запросами, которые отправляются в приложение, и ответы, которые приложение отправляет обратно.
Вы регистрируете их в своих приложениях Application::middleware()
метод, в Server.buildMiddleware
событие или при соединении маршрутов.
// src/Application.php
// ...
use Cake\Http\Middleware\EncryptedCookieMiddleware;
class Application extends BaseApplication
{
public function middleware($middlewareQueue)
{
// ...
$middlewareQueue->add(new EncryptedCookieMiddleware(/* ... */));
return $middlewareQueue;
}
}
Смотрите также