コードロード

エラー討伐

【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(ネクスタット)