【Laravel】特定のcookieの値の暗号化を解除(Laravel外からもcookieを使用したい)
課題
CookieファサードとPHPのfilter_inputで取得できるcookieの値が異なる。 Laravel外からcookieを使用したいが、暗号化されているため使用できない。
<?php $cookie_key_1 = Cookie::get('cookie_key'); $cookie_key_2 = filter_input(INPUT_COOKIE, 'cookie_key');
原因
\Illuminate\Cookie\Middleware\EncryptCookies
このミドルウェアがあるため。
Laravel内でCookieファサードを使用してcookieを設定すると、暗号化された状態になっている。
Cookieファサードを使用してcookieを取得する時は、上記のミドルウェアにより自動で復号されるようになっている。
対策
暗号化されていると都合が悪いケースがあったため、特定のcookieは暗号化の対象外とする。
<?php // app/Http/Middleware/EncryptCookies.php class EncryptCookies extends Middleware { protected $except = [ 'cookie_key' ]; }
これで、Cookieファサードを使用してcookieを設定、取得しても、暗号化されていない平文を取得できる。
参考
【Laravel5】特定のCookieだけ暗号化を解除する|Laravel|PHP|開発ブログ|株式会社Nextat(ネクスタット)