PHP:Laravelでクッキーを使うときに暗号化されないようにする方法

こんにちは、さるまりんです。

LaravelのCookieファサードで発行されたCookieの値は暗号化されて保存されます。
JavaScript等でそのまま使うときは暗号化されてない方が使いやすい時があります。

値を暗号化されないようにするにはミドルウェアのEncryptCookies$exceptに設定しておくことで暗号化を避けることができます。

こんな感じです。

class EncryptCookies extends Middleware
{
    // ageとsexというキーのCookieは暗号化されません
    protected $except = [
        'age',
        'sex',
    ];

    // 他いろいろあれば...
}

ちなみに、サーバー側で発行したCookieの値をクライアント側、JavaScriptで取れない!ってなった時はSecureやHttpOnlyがどうなっているかを確認するのが良いかと思います。

Secureはhttpsで暗号化されている時にのみ使えるもの、HttpOnlyはJavaScriptのDocument.cookieではアクセスできません。

なので、発行時を見直してみてください。

定義はこうなっています。

public function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true)

ですので、5つ目、6つ目の引数に気をつけて、こんな感じで呼び出します。

Cookie::make('my-age', $age, 60 * 24, null, null, false, false);

この二か所でハマってしばらくかかってしまったのでメモに残しておきます。

読んでくださってありがとうございました!
それではまた!