Laravel 画面を一度リロードしないとCookieが表示されない
こんにちは。今回はLaravelで一度リロードしないとCookieの値が表示されない現象について解説します。
現象
viewにcookieの値を表示させたい場合、以下のようにviewメソッドにcookieを付与して返すと、viewにcookieが表示されず、画面を一度リロードするとviewにcookieが表示されるという現象が発生します。
// routing
Route::post('/cookie', function (Request $request) {
// cookieを付与
return response()->view('cookie')->cookie('test', $request->test, 1);
});
// view
{{ Cookie::get('test'); }} // Cookieの値が表示されない
原因
Viewの描画段階でCookieが未だ存在していないことが原因です。Cookie::getでCookieの値を取得することができます。しかし参照できる値は一度レスポンスヘッダにCookieを付与してクライアントに返し、クライアントが次のリクエストでサーバーに送付したCookieです。ですのでクライアントに返す前のCookieを参照できていないことが原因です。
解決策
Cookieを発行した後、リダイレクトさせればCookieを参照することができます。リダイレクトは特定のURLに対してgetリクエストを発生させるため、Cookieをクライアントに返し、クライアントがCookieを送り返す処理を発生させることができます。これにより、リダイレクト先の画面でCookieを参照することができます。
Route::post('/cookie', function (Request $request) {
// cookieを新たに発行する
Cookie::queue('test', $request->test, 1);
// cookie.blade.phpへリダイレクト
return redirect('/cookie');
});
まとめ
今回はCookieに関するtipsを紹介しました。Cookieのことがよく判っていないうちは陥りがちなので、参考にしていただければと思います。
ディスカッション
コメント一覧
まだ、コメントがありません