Laravel7 Sessionの使い方

Laravel7 Sessionの使い方

Laravel7でsessionの簡単な使い方を記述してます。

環境

  • OS windows10 pro 64bit
  • Composer 1.10.5
  • PHP 7.4.5
  • MariaDB 10.4.12
  • Laravel Framework 7.6.2

※windows10に Laravel のインストールはこちら
※windows10に Composer のインストールはこちら
※windows10に PHP のインストールはこちら
※windows10に MariaDB のインストールはこちら

bootstrap導入

ここでは、レイアウトにbootstrapを利用しているため導入手順を記述

詳しい手順はこちらに記述してますが、下記のコマンドで利用可能になります。

composer require laravel/ui
php artisan ui bootstrap
npm install && npm run dev

コントローラー作成

Sessionを扱うためのコントローラーを作成していきます。
「HumanController」という名前でコントローラーを作成します。

php artisan make:controller SessionController

app/Http/Controllers/SessionController.phpが生成されているので、
sessionを保存するためのstoreメソッドと、
sessionを削除するためのdeleteメソッドを
を作成します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SessionController extends Controller
{
    public function index()
    {
        return view('session.index');
    }

    public function store(Request $request)
    {
        //セッションへ値を保存
        $request->session()->put('text', $request->input('text'));
        //次のリクエスト間だけセッションを保持
        $request->session()->flash('msg', 'セッションに保存されました');

        return redirect('session');
    }

    public function delete(Request $request)
    {
        //session破棄
        $request->session()->forget('text');
        return view('session.delete');
    }
}

ここでは、view(‘session.delete’)としているので削除用のビューは
「session」フォルダ配下に「 delete.blade.php 」として作成します。
laravelでは、区切り文字「.」でフォルダとファイル名が指定されます。

ビュー作成

次にレイアウト部であるviewを作成します。

resources\views内で「session」というフォルダを作成して「index.blade.php」を下記の内容で、新たに作成します。

<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>セッション利用</title>
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">   
</head>
<body>
    <div class="mx-auto" style="margin-top: 100px; width: 800px;">
        @if (Session::has('msg'))
            <h2>session()->flashはリロードすると破棄されます</h2>         
            <div class="alert alert-success" role="alert"><span class="badge badge-secondary">session:msg</span> {{ Session::get('msg') }}</div>            
        @endif

        @if (Session::has('text'))
            <h2>session()->put</h2>  
            <div class="alert alert-success" role="alert"><span class="badge badge-secondary">session:text</span> {{ Session::get('text') }}</div>
            <a href="session/delete"><button type="button" class="btn btn-danger">セッションを破棄</button></a>
            @else
            <h2>セッションは存在しません</h2>
        @endif

        @if (!Session::has('text'))
        <form action="session" method="POST">
            @csrf
            <div class="form-group">
                <label for="exampleInputEmail1">テキストを入力</label>
                <input type="text" class="form-control" name="text">
                <button type="submit" class="btn btn-primary">保存</button>
            </div>
        </form>
        @endif
    </div>
</body>
</html>

@csrf は Bladeテンプレート機能の1つで、CSRF対策となります。

次に同一階層に 「 delete.blade.php 」 を下記の内容で作成します。

<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>session破棄</title>
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">   
</head>
<body>
    <div class="mx-auto" style="margin-top: 200px; width: 800px;">
    <div class="alert alert-warning" role="alert">セッションのデータが破棄されました</div>
        <a href="/session"><button type="button" class="btn btn-primary">戻る</button></a>
    </div>
</body>
</html>

ルーティング追加

アクセスするURLを設定するため、ルーティングを記述します。
ここでは/sessionに設定します。

Route::get('session', 'SessionController@index');
Route::post('session', 'SessionController@store');
Route::get('session/delete', 'SessionController@delete');

確認

ブラウザから http://localhost:8000/session にアクセスするとsessionの挙動が確認できます。

ちなみにsessionはデフォルトだと.envに記述されている通り、
\storage\framework\sessionsフォルダ内で管理されてます。

## .env
SESSION_DRIVER=file

\storage\framework\sessionsフォルダ内
セッションファイル