Laravel レスポンスへクッキーを付ける方法
はじめに
laravelにおいて、クッキーの付与はどのようになっているのか気になった為、簡単にまとめていきたいと思います。
2つのメソッド
setcookie()メソッド
PHPネイティブのメソッド。
他のヘッダ情報と共に 送信するクッキーを定義することができる。
クッキーは、スクリプトによる他のあらゆる出力よりも前に送信される必要があります。
その為、ユーザーがログインした際などにcookieを付与してあげます。
記述例
setcookie(string $name, string $value = "test", array $options = []): bool
// 変数nameという名前で、valueにセットされたtestという名前のcookieを付与することができる。
cookie()メソッド
こちらは、laravelのメソッド。
記述れい
return response('Hello World')->cookie(
'name', 'value', $minutes
);
// レスポンスのインスタンスにcookieを付与することができる。
laravelのヘルパーメソッド。
cookieを取得してみる
手元にあるlaravelで書かれたコントローラーから、cookieを取得してみる。
すでにcookieが付与されているので、その中身がどうなっているか確認する。
Controller
$cookie =$request->cookie();
\Log::info("cookieの中身");
\Log::debug(print_r($cookie, true));
// 中身の出力
(
[_ga] =>
[_gid] =>
[_gat_UA-190877223-2] =>
[XSRF-TOKEN] => MyjE3YcTvyi3QOZZBdJg7ywa2SqgT6gN1L8OR5I8
[laravel_session] => L2ViYtgYxVI8gj92LOjULhhbfdkncFQrgY8VjL70
[_ga_11GQFPEK2V] =>
)
クッキーの中身について
googleAlytics用のcookieの用なので、今回はスルーする。
参考: https://fod.ie/wp-content/uploads/2020/02/FOD-Cookie-Policy.pdf
XSRF-TOKENについて
luck-console/app/luck-console/app/Http/Middleware/VerifyCsrfToken.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
ミドルウェアで生成されていた。
こちらは、正規のページからアクセスが行われていることを証明するための値。
リクエストを送る際に、このCトークンが渡されていない、または正しくないときはサーバー側でアクセスを拒否することで、不正なクライアントからのアクセスを防ぐことができる。
つまり、正規のクライアントからリクエストが来ていることを、サーバーが確認することができる。
laravel_session について
luck-console/app/luck-console/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php
これもミドルウェアで生成されていた。
こちらは、名前の通り、session情報としての役割を持つ。
laravelでは、config/session.phpにて設定を変更することができる。
例えば、セッション時間を何分にしようとか。セッション時間を過ぎると、サーバーに同一のユーザーとみなされないので、再度ログインする必要がある。など。
何故クッキーが必要か
HTTPはステートレス。状態を保持できない。という理由の為。
それによって、クッキーがなければ、同じアカウントで、ネットショッピングを続けることができず、後ほど買おうと思って買い物カゴに入れた情報が、なくなってしまったりする。
このcookieとsessionによってステートフルを実現する。
さいごに
laravelでは、既にcookieを取得していたため、深く考える必要はなそうであるが、基礎を理解できた。このように、フレームワークはとても便利で、見なくていいところが多いが、理解することで、次の開発の力になることは確実。日々、しっかりと基礎から固めていきたい。
Discussion