セッションについて

セッションとは、データを保存しておく仕組みのことで、リロードしたり複数ページにまたがってもデータは消えません。

以下のようなシステムでセッションが使われています。

アクセスカウンター
ページが切り替わっても、アクセス数はリセットされずどんどん加算されます。
ログイン機能
ページが切り替わっても、ログイン状態はキープします。
ショッピングカート
ページが切り替わっても、商品はカートに入ったままです。

PHPでプログラミングしたことがある人は聞いたことがあると思います。

今回はLaravelでsessionを扱う方法についてエントリーします。

 

使い方

Laravelでセッションを操作するには、主に3つの方法があります。

違いは特にありません。ただ、HTTPリクエストから送られたデータをそのままセッション値へ保存するならRequestインスタンスを経由したやり方の方が便利です。

  • Requestインスタンスを経由
  • Sessionファサード
  • sessionヘルパ

それでは用途ごとに説明していきます。

 

INDEX

 

セッションへ値を保存


// Requestインスタンスを経由
$request->session()->put('contact', $request->contact);

// Sessionファサードを使う場合
\Session::put('contact', 'hogehoge');

// sessionヘルパ
session(['contact' => 'hogehoge' ]);

 

セッションから指定の変数を読み込む


// Requestインスタンスを経由
$request->session()->get('contact');

// Sessionファサードを使う場合
\Session::get('contact', 'xxx'); // 取得できない場合 xxx を返す

// sessionヘルパを使う場合
session('contact');

 

セッション値の存在確認をする


// Requestインスタンスを経由
if ( $request->session()->has('count') ){ // ありの場合 }else{ // なしの場合 }

// Sessionファサードを使う場合
if ( \Session::has('count') ){ // ありの場合 }else{ // なしの場合 }

// sessionヘルパを使う場合
if ( session()->has('count'); ){ // ありの場合 }else{ // なしの場合 }

 

値がnullであろうとも存在していることを確認したい場合はexistsメソッドを使います。


// Requestインスタンスを経由
if ( $request->session()->exists('count') ){ // ありの場合 }else{ // なしの場合 }

// Sessionファサードを使う場合
if ( \Session::has('exists') ){ // ありの場合 }else{ // なしの場合 }

// sessionヘルパを使う場合
if ( session()->has('exists'); ){ // ありの場合 }else{ // なしの場合 }

 

セッションから指定の変数を削除


// Requestインスタンスを経由
$request->session()->forget('contact');

// Sessionファサードを使う場合
\Session::forget('contact');

// sessionヘルパ を使う場合
session()->forget('contact');

 

セッションから全データを削除


// Requestインスタンスを経由
$request->session()->flush();

// Sessionファサードを使う場合
\Session::flush();

// sessionヘルパ を使う場合
session()->flush();

 

全てのセッションを読み込む


// Requestインスタンスを経由
$request->session()->all();

// Sessionファサードを使う場合
$session__all = \Session::all();

// sessionヘルパ を使う場合
session()->all();

 

フラッシュメッセージ

次のリクエスト間だけセッションにアイテムを保存したい場合はflashメソッドを使います。


// Requestインスタンスを経由
$request->session()->flash('flash_message', '登録完了!');

// Sessionファサードを使う場合
\Session::flash('flash_message', '登録完了!');

// sessionヘルパ を使う場合
session()->flash('flash_message','登録完了!');

// withヘルパを使っても可能
return redirect('/')->with('flash_message', '登録完了!');

フラッシュメッセージについては過去にエントリーしました。こちらもよければ

 
以上です。

本庄マサノリ

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

>> Twitter をフォローする

 

-基礎知識