Laravelでのセッション操作(まとめ)

2019/08/06

素のPHPでセッション操作をするときは、グローバル変数 $_SESSION を使います。

それでは、Laravel ではどう書くのでしょうか?

Laravel ではすでにセッションの機能がいくつか用意されています。

方法は主に3つあります。

1.Requestクラスのメソッドを使う ※Requestクラスをインポート
2.ファサード ※Sessionクラスをインポート
3.ヘルパ

また、メソッドチェーンで flash メソッドを使うと、フラッシュメッセージ(データをセッションに一時保存)をすることもできます。

今回は Laravel におけるセッション操作についてまとめます。

 

1.Requestクラスのメソッドを使う

最もよく使われる方法です。

以前、リクエスト処理についてまとめましたが、HTTPリクエストインスタンスを経由して Session を使う方法です。

具体的には以下のように使います。

 
Controller


:
// Requestクラスをインポート
use Illuminate\Http\Request;
:
class TopController extends Controller
{
public function index(Request $req)
{

// 存在チェック
if ($req->session()->has('name')) {
  //
}

// 値を保存
$req->session()->put('key', 'value');
// 'name' というセッションキーに 'TEST' をセット
$req->session()->put('name', 'TEST');
// フォームからの name 属性をセッションに保存する場合
$req->session()->put('name', $req->input('name');

// セッション「name」の値を取得
$name = $req->session()->get('name');
// セッションの値を全て取得
$data = $req->session()->all();

// 指定アイテムを削除
$req->session()->forget('key');
// 全て削除
$request->session()->flush();

}
}

 
View(Blade)


<span class="navbar-text">ようこそ! {{ Session::get('name') }} 様</span>

 

フラッシュメッセージ

データをセッションに一時保存しメッセージとして表示するやり方をフラッシュメッセージといいます。

1回限りのメッセージを表示したい場合に使います。

例えば「登録完了!」といったメッセージを一時的に表示したい場合に使います。

フラッシュデータの設定は以下


$req->session()->flash('message', '本登録が完了しました');

Bladeテンプレート上では以下のようにファサードでフラッシュデータを扱います。


@if (Session::has('message'))

{{ Session::get('message') }}

@endif

 

2.ファサード

次にファサードを使ってSessionを利用するやり方です。

チェック必須!
冒頭でセッションクラスをインポートします。

:
// セッションをインポート(必須)
use Session;
:
class TopController extends Controller
{
public function getIndex()
{
// userid が存在しない場合 xxxxx が返る
$userid = Session::get('userid', 'xxxxx');

if (Session::has('username')) {
  // セッションからkey(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');
  // セッションにkey(userid):value($userid)を保存
  Session::put('userid', $userid);
}

return Redirect::to('/session/page/');
}

public function getPage2()
{
  // セッションから全データを取得
  $all = Session::all();
  return view('session.page2', compact('all'));
}

public function getLogout()
{
  // セッションから username(key) を削除
  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() セッションから全データを削除。

 

3.ヘルパ

グローバルSessionヘルパ関数でSessionを利用します。


class TopController extends Controller
{

public function index()
{
// セッションから一つのデータを取得する
$id = session('id');

// セッションの値を全て取得
$data = session()->all();

// デフォルト値を指定する場合
$name = session('username', '名無し');

// セッションへ一つのデータを保存する
session(['users' => null]);

// キー/値ペアの配列を渡し、値を設定することができます。
session(['chairs' => 7, 'instruments' => 3]);

// ユーザー情報の情報が存在する(!= null)かチェック
$is_users = session()->has('users');

// ユーザー情報がセット(nullでもOK)されているかチェック
$exists = session()->exists('users');

// 削除 (指定の値を個別に)
session()->forget('key');

// 削除 (全データ)
session()->flush();

}
}

 
Laravelにおけるセッションの使い方は以上です。

 
Laravel のセッションについてもっと理解を深めたい方は PHPフレームワーク Laravel入門 をお勧めします。

ポイント
セッション関連の掲載ページ

Chapter 7 RESTfulサービス/セッション/ぺジネーション/認証/テスト
7.1 リソースコントローラとRESTful
7.2 セッション
7.3 ぺジネーション
7.4 ユーザー認証
7.5 ユニットテスト

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識