LaravelでCookieを扱う(Cookieの発行〜Viewに表示まで)

こんにちは。今回はLaravelでCookieを扱う方法を解説します。ちょっとしたデータをクライアント側に持たせたいときにCookieは便利です。

Cookieを簡単に解説

Cookieとはサーバーから送られたデータをWebブラウザで一時的に保持するための仕組みです。Cookieを上手く利用することで、サイトの利便性を向上させることができます。例えばログイン画面に2回目以降にアクセスした場合に、過去に入力したアカウント情報が入力されていたことはありませんか?この機能もCookieを利用しています。前回入力したアカウント情報をCookieとしてWebブラウザに保存しておくのです。2回目以降はCookieに保存しているデータをアカウント情報欄に表示しています。他にもAmazonなどのECサイトでショッピングカートの中身を保存して、一度カートに入れた商品を保持しておく機能もCookieが使用されています。

LaravelでCookieを取り扱う

ではここからはLaravelでCookieを扱う方法を解説します。

Cookieを新たに発行する

cookieを新たに発行するにはresponseのcookie関数を使うか、Cookieファサードのqueueメソッドを使います。

// cookieヘルパ関数
response()->cookie(キー名, 値, 有効期限 ※分指定);

// Cookieファサード
Cookie::queue(キー名, 値, 有効期限 ※分指定);

実際にtestという名前でcookieを発行し、Viewを返してみましょう。有効期限は1分に設定しています。

return response()->view('cookie')->cookie('test', 'hello world', 1);

CookieをViewに表示する

BladeテンプレートでCookieを扱うにはCookieファサードを使います。値を取得するにはgetメソッドにキー名を指定します。

{{ Cookie::get('test'); }}

前回入力した値をテキストボックスに表示してみる

冒頭で紹介したアカウントを保存するユースケースを実装してみます。テキストボックスが1つ配置してあるViewを作り、postしたタイミングでCookieに保存します。次回アクセスした際にテキストボックスに前回入力した情報が表示されるようにします。

Viewを作る

まずはViewを作りましょう。テキストボックス×1、ボタン×1を設置します。

<html>
    <body>
        <form method="post" action="/cookie">
            @csrf
            <input name="test" type="text"/>
            <input type="submit" value="Cookieに保存"/>
        </form>
    </body>
</html>

ルーティングを作成する(Viewを表示)

作成したViewを表示するためのルーティングを作ります。

Route::get('/cookie', function () {
    return view('cookie');
});

ブラウザから/cookieにアクセスしてみます。以下の画面が表示されていれば成功です。

Cookieに保存する

テキストボックスに入力した値をCookieに保存します。今回は実験なのでルーティングのファイルに記述してしまいます。Cookieを保存した後、リダイレクトするのがポイントです。viewヘルパ関数でViewを返すとCookieに保存した値が即時反映されません。(1回画面をリロードすると反映されます)

use Illuminate\Http\Request;

Route::post('/cookie', function (Request $request) {
    // cookieを新たに発行する
    Cookie::queue('test', $request->test, 1);

    // cookie.blade.phpへリダイレクト
    return redirect('/cookie');
});

cookieの値をテキストボックスに表示する

保存したCookieをテキストボックスに表示するよう設定します。Viewを再び編集していきます。テキストボックスにvalue属性を追加し、Cookieを表示するよう設定します。

<input name="test" type="text" value="{{ Cookie::get('test'); }}"/>

ここまで設定したらテキストボックスに任意の文字を入力しボタンを押してみましょう。ボタンをおしたらブラウザのタブを閉じて、開き直してください。すると自身が入力した値がテキストボックスに表示されているはずです。

まとめ

今回はLaravelでCookieを扱う方法を解説しました。ヘルパ関数が充実しているので簡単な記述でCookieを扱えます。CookieはWebサイトのユーザビリティ向上になるので、使えるところでは積極的に使いたい技術です。しかsCookieはブラウザ側にデータを保持するため、Webサイトのユースケースによってはセキュリティ的に危ない場合もあります。使い所はしっかりと考えて使うようにしましょう。

Laravel

Posted by kobainmac