PHP
laravel
cookie

LaravelでプレーンなCookieを作る

LaravelでCookieを作る時、勝手に暗号化してしまうのを防ぐ方法。

Controller

public function index()
{
    $value = "test";
    $cookie = \Cookie::make("TEST_COOKIE", $value, 60, '/', 'example.com', true, true);

    return response()->withCookie($cookie);
}

こんな感じで作ったCookieは、Laravelが勝手に暗号化しちゃうらしい。

暗号化されたCookieは、同一ドメイン内のLaravel以外のアプリケーションで読み取ることが出来なかった。
(もしかしたらなにか方法があるのかもしれない・・・)

Cookieに埋め込んだ情報が暗号化するほどのデータではない場合、プレーンなCookieでも問題ないと思うので、Middlewareで除外をしてあげる。

Middleware

app/Http/Middleware/EncryptCookies.php$except 配列に除外したいCookie名を入れると暗号化を防げる。

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        'TEST_COOKIE'
    ];
}

Cookie名はconfigで持ちたかったけども、configの内容をMiddlewareへ渡す方法がわからなかったので一旦ベタ書き対応とした。