はじめに
Webアプリケーション開発ではCookieを利用してブラウザとサーバーで値の共有を行う事があるかと思います。
LaravelのCookieファサードの基本的な利用法を見てみたいと思います。
基本メソッド
付与
任意の場所でCookieファサードの
queue
メソッドを使用すると設定したい値をキューしておき、レスポンスする際に自動でCookieを付与してくれます。
1 2 3 4 | Cookie::queue('name1', 'value1', $minutes); Cookie::queue('name2', 'value2', $minutes); return view('sample.page'); // レスポンスにname1とname2のcookieが付与される |
配列をcookieに保管したい場合もあると思います。その場合は、
json_encode
して保管する事が出来ます。
1 2 3 4 5 6 7 | $array1 = ['value1', 'value2', 'value3']; $array2 = ['key1' => 'value1', 'key2' => 'value2']; Cookie::queue('array1', json_encode($array1)); Cookie::queue('array2', json_encode($array2)); return view('sample.page'); |
保管した値は、
json_decode
して配列として利用出来ます。
取得
Cookieの値をサーバー側で取得する際は、Cookieファサードの
get
メソッドで取得したいcookieのキー指定する事で取得出来ます。
1 2 3 4 | $cookie = Cookie::get('name1'); var_dump($cookie); // value1 return view('sample.page')->with('cookie', $cookie); |
削除
ブラウザに保存したCookieの値をサーバー側で削除する際は、Cookieファサードの
forget
メソッドで削除したいcookieのキー指定する事で削除出来ます。
1 2 3 | Cookie::queue(Cookie::forget('name1')) // keyがname1のcookie削除 return view('sample.page'); // ブラウザ側からname1のcookieが削除される |
他メソッド
他、Cookieファサードで定義されているメソッドの一部です。
forever
foreverと聞くと無期限のcookieを付与出来そうですが、実際は有効期限5年のものが付与されます
1 2 | Cookie::queue(Cookie::forever('forever1', 'forever_value1')); return view('sample.page') |
getQueuedCookies
キューしたcookieの一覧を配列で取得します
1 2 | $cookie_array = Cookie::getQueuedCookies(); var_dump($cookie_array) // キューされたcookieの一覧 |
unqueue
キューからcookieを削除します
1 2 3 4 5 6 | Cookie::queue('name1', 'value1'); Cookie::queue('name2', 'value2'); Cookie::unqueue('name2'); return view('sample.page'); // name2のcookieは付与されない |
ミドルウェア
AddQueuedCookiesToResponse
キューしたcookieのレスポンスへの付与は
AddQueuedCookiesToResponse
というミドルウェアが行っています。
その為、このミドルウェアを登録しておかないと、キューしてもcookieがレスポンスに付与されません。
Laravelの一部バージョンではデフォルト設定だとルートミドルウェア(web)にしかこのミドルウェアが設定されてないらしく、以前apiルートでいくらキューしてもcookieが付与されず数時間悩んでしまった事がありました。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | protected $middlewareGroups = [ 'web' => [ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ \Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, ], ]; |
EncryptCookies
通常、付与されたcookieは暗号化されてブラウザに保管されます。
ミドルウェアの
EncryptCookies
の
$except
にキー名を設定しておくと、値が暗号化されずに保管することが出来ます。
1 2 3 4 5 6 7 | class EncryptCookies extends Middleware { // name1とname2というキー名のcookieの値は暗号化されない protected $except = [ 'name1', 'name2' ]; |
さいごに
Cookieファサードを利用すると簡単にcookie周りの実装を行う事が出来ます。
Laravelで実装するならファサード利用するのが良いかと思います。