LaravelのSessionを使ってみます。
サンプルコード
ログインフォームを作成して、ユーザー情報をセッションで保持するサンプルを作ってみます。
今回は試しにセッションを使ってみるだけなので、データベース等の処理は何もしていません。
app\Http\routes.php
ルーティングを設定します。
Route::controller('/session', 'SessionController');
ビューは以下の5ページ分作成します。
- ログイン画面:index
- ログイン後画面1: page
- ログイン後画面2: page2
- ログアウト画面1: logout
- ログアウト画面2: logout2
resources\views\session\index.blade.php
ユーザーIDとユーザー名を入力してログインします。
<div>{{$userid}}: {{$username}}</div> <form method="POST" action="/session"> <dl> <dt>ユーザーID</dt> <dd><input type="text" name="userid"></dd> </dl> <dl> <dt>ユーザー名</dt> <dd><input type="text" name="username"></dd> </dl> <input type="submit" value="ログイン"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> </form>
セッションを保持している場合、{{$userid}}と{{$username}}の部分に値が入ります。
resources\views\session\page.blade.php
ログイン後の画面です。
ログイン時に入力した値が{{$userid}}と{{$username}}に入ります。
<dl> <dt>ユーザーID</dt> <dd>{{$userid}}</dd> </dl> <dl> <dt>ユーザー名</dt> <dd>{{$username}}</dd> </dl> <div><a href="/session/page2">ページ2へ</a></div> <div><a href="/session/logout">ログアウト(usernameだけ削除)</a></div> <div><a href="/session/logout2">ログアウト2(セッション全削除)</a></div>
resources\views\session\page2.blade.php
ログイン後の画面2です。
セッションに保持している全データをvar_dump()で出力します。
<?php var_dump($all); ?> <div><a href="/session/page">ページ1へ</a></div> <div><a href="/session/logout">ログアウト(usernameだけ削除)</a></div> <div><a href="/session/logout2">ログアウト2(セッション全削除)</a></div>
resources\views\session\logout.blade.php
ログアウト画面です。
セッションのusernameだけを削除します。
<p>usernameだけ削除でログアウトしました。</p> <div><a href="/session">ログインへ</a></div>
resources\views\session\logout2.blade.php
ログアウト画面2です。
セッションから全データ削除します。
<p>セッション全削除でログアウトしました。</p> <div><a href="/session">ログインへ</a></div>
app\Http\Controllers\SessionController.php
コントローラーに各ビューの処理を記述します。
<?php namespace App\Http\Controllers; use Session; use Request; use Redirect; class SessionController extends Controller { public function getIndex() { $userid = Session::get('userid', 'xxxxx'); // useridが存在しない場合xxxxxが返る if (Session::has('username')) { $username = Session::get('username'); } else { $username = '名無し'; } return view('session.index', compact('userid', 'username')); } public function postIndex() { // useridの値があるときだけセッションを保存 if (Request::has('userid')) { $userid = Request::input('userid'); Session::put('userid', $userid); } // usernameの値があるときだけセッションを保存 if (Request::has('username')) { $username = Request::input('username'); Session::put('username', $username); } return Redirect::to('/session/page/'); } public function getPage() { $userid = Session::get('userid'); $username = Session::get('username', '名無し'); // usernameが存在しない場合名無しが返る return view('session.page', compact('userid', 'username')); } public function getPage2() { $all = Session::all(); return view('session.page2', compact('all')); } public function getLogout() { Session::forget('username'); return view('session.logout'); } public function getLogout2() { Session::flush(); return view('session.logout2'); } }
Session::get(key[, default]) | セッションからkeyを取得。 第2引数でkeyがセッションに存在しない場合の初期値を設定。 |
---|---|
Session::has(key) | セッションにkeyが存在するかを調べる。 |
Session::put(key, value) | セッションにkey: valueを保存。 |
Session::all() | セッションから全データを取得。 |
Session::forget(key) | セッションからkeyのデータを削除。 |
Session::flush() | セッションから全データを削除。 |
ログイン画面にアクセスします。
最初はセッションを保持していないので、「xxxxx: 名無し」と表示されます。
ユーザーID:you、ユーザー名:曜 でログインします。
セッションからユーザーIDとユーザー名を取得して表示できました。
ページ2へ移動します。
セッションの全データをvar_dump()で表示できました。
ログアウトしてみます。
セッションからユーザー名だけ削除しました。
ログイン画面に戻ってみます。
最初にアクセスした時と違い、ユーザーIDにyouが残っているのが確認できました。
ユーザーID:kanan、ユーザー名:果南 でログインします。
ユーザーID、ユーザー名とも今入力した値に変更されています。
ページ2へ移動します。
こちらでも値の反映が確認できました。
ログアウト2へ移動してみます。
セッションから全データ削除しました。
ログイン画面に戻ってみます。
セッションを削除したので、最初にアクセスした時と同じく「xxxxx: 名無し」と表示されました。
【参考サイト】
コメントが承認されるまで時間がかかります。