Laravelでセッションを使う

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

use-a-session-with-laravel01

ユーザーID:you、ユーザー名:曜 でログインします。

use-a-session-with-laravel02

セッションからユーザーIDとユーザー名を取得して表示できました。
ページ2へ移動します。

use-a-session-with-laravel03

セッションの全データをvar_dump()で表示できました。
ログアウトしてみます。

use-a-session-with-laravel04

セッションからユーザー名だけ削除しました。
ログイン画面に戻ってみます。

use-a-session-with-laravel05

最初にアクセスした時と違い、ユーザーIDにyouが残っているのが確認できました。

use-a-session-with-laravel06

ユーザーID:kanan、ユーザー名:果南 でログインします。

use-a-session-with-laravel07

ユーザーID、ユーザー名とも今入力した値に変更されています。
ページ2へ移動します。

use-a-session-with-laravel08

こちらでも値の反映が確認できました。
ログアウト2へ移動してみます。

use-a-session-with-laravel09

セッションから全データ削除しました。
ログイン画面に戻ってみます。

use-a-session-with-laravel10

セッションを削除したので、最初にアクセスした時と同じく「xxxxx: 名無し」と表示されました。

use-a-session-with-laravel11

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930