Laravelでsession管理! sessionデータの色々な操作方法を徹底解説

こんにちは! 西村です。
 
今回は、業務の中でよく使用しているLaravelでのsessionの扱い方を解説します。Laravelでセッションデータを操作する基本的な方法はセッションヘルパとリクエストインスタンスの2つがあります。使用方法に大きな差はありません。
 
リクエストインスタンスはRequestインスタンスを介してセッションにアクセスします。セッションヘルパはグローバルなsession関数を使用して、セッションのデータの取得や保存を行っています。実際の操作方法について説明いたします。

セッションヘルパとリクエストインスタンスの違い

セッションヘルパとリクエストインスタンスの違いについてはLaravel 8.x HTTPセッションにも記載がありますが特に大きな違いはありません。

HTTPリクエストインスタンスを介してセッションを使用する場合と、グローバルなsessionヘルパを使用する場合の、実践的な違いはほとんどありません。

Laravel 8.x HTTPセッションより引用

セッションのデータ取得

セッション内のデータを取得するためには、getメソッドを使用します。

  • セッションヘルパ

$hoge = session()->get('key');;

  • リクエストインスタンス

$hoge = $request->session()->get('key');

セッションの全データ取得

セッション内のすべてのデータを取得する場合は、allメソッドを使用します。

  • セッションヘルパ

$hoge = session()->all();

  • リクエストインスタンス

$hoge = $request->session()->all();

セッションのデータ保存

リクエストインスタンスのputメソッドまたはsessionグローバルヘルパを使用してセッションを保存します。

  • セッションヘルパ

session(['key' => 'データ保存']);

  • リクエストインスタンス

$request->session()->put('key', 'データ保存');

配列セッションへのデータ追加

pushメソッドを使用して、配列のセッションへ新しい値を追加することができます。

  • セッションヘルパ

session()->push('key', '追加データ');

  • リクエストインスタンス

$request->session()->push('key', '追加データ');

セッションのデータ削除

forgetメソッドは、セッションからデータの一部を削除します。

  • セッションヘルパ

session()->forget('key');

  • リクエストインスタンス

$request->session()->forget('key');

フラッシュデータの保存

フラッシュデータは1回のアクセスで削除されるデータです。セッションにアイテムを一時保存したい場合などに使用されます。持続的に保存する必要がないメッセージなどに使われます。
 

  • セッションヘルパ

session()->flash('flashKey', '一時データ');

  • リクエストインスタンス

$request->session()->flash('flashKey', 'データ');

セッションデータの全削除

セッションからすべてのデータを削除したい場合は、flushメソッドで削除できます。

  • セッションヘルパ

session()->flush();

  • リクエストインスタンス

$request->session()->flush();

セッション存在判定

hasメソッド

対象のアイテムがセッションに存在しており、nullではない場合trueを返す。
 

  • セッションヘルパ

session()->has('key');

  • リクエストインスタンス

$request->session()->has('key');

existsメソッド

nullであっても対象のアイテムがセッションに存在している場合trueを返す。
 

  • セッションヘルパ

session()->exists('key');

  • リクエストインスタンス

$request->session()->exists('key');

missingメソッド

対象のアイテムがセッションに存在しない場合trueを返します。
 

  • セッションヘルパ

session()->missing('key');

  • リクエストインスタンス

$request->session()->missing('key');

まとめ

以上がLaravelでの基本的なsession管理の方法になります。書き出してみると意外と使われている操作は少なくて覚えやすいですね。私の備忘録のような感覚で書いているのですが皆様のお役に少しでも立てれば嬉しいです。
 
 
 
 
《関連記事》

PHPでやるべきセッションハイジャック対策
技術
2016.5.31(Tue)

あなたのサイトは大丈夫? PHPでやるべきセッションハイジャック対策!

#PHP

Spring Session + Redis(AWS ElastiCache)でセッション管理
技術
2018.8.29(Wed)

Spring Session + Redis(AWS ElastiCache)でセッション管理を行う方法【導入編】

#プログラム #Java #CODEMATIC

セッション管理でサーバー起動時に例外発生を解決
技術
2018.9.12(Wed)

【エラー解決方法】Redisを使ったセッション管理でサーバー起動時に例外発生!? を解決する方法(その1)

#プログラム #Java #技術

記事をシェア
MOST VIEWED ARTICLES