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: 名無し」と表示されました。

【参考サイト】
コメントが承認されるまで時間がかかります。