Laravelでセッション機能を実装する方法

Laravalでセッション機能を実装する

●3種類の実装方法がある。
一つ目は『HTTPリクエストインスタンス』を経由する方法。
二つ目は『グローバルSessionヘルパ関数』を利用する方法。
三つめは『ファザード』を利用する方法。

上記は三つとも同じように使えることができる。
特に違いはないようで、個人の好みの方法で書いていい模様。

 

セッションIDを取得する

Session::getId()

 

HTTPリクエストインスタンス』を経由する方法

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request, App\Http\Controllers\Controller;

class TopController extends Controller
{
 public function index(Request $request)
 {
  // セッションIDの再発行
  $request->session()->regenerate();

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

  // IDを取得
  $id = $request->session()->get('id');

  // 名前を取得 (クロージャー利用)
  $name = $request->session()->get('username', function () { return '名無し'; });

  // ユーザー情報を取得
  $users = $request->session()->get('users', array());

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

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

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

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

?>

 

グローバルSessionヘルパ関数』を利用する方法

<?php 

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class TopController extends Controller
{ 
 public function index()
 { 
  // セッションIDの再発行
  session()->regenerate(); 

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

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

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

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

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

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

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

  // セッションをクリア&セッションIDを再発行(Illuminate\Session\Store::invalidate) 
  session()->invalidate(); 

  // セッションIDを再発行(Illuminate\Session\Store::migrate) 
  $this->session->migrate(true); 

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

?>

 

『ファザード』を利用する方法

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller, Session; 

class TopController extends Controller 
{ 
 public function index() 
 { 
  // セッションIDの再発行 
  Session::regenerate(); 

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

  // IDを取得する 
  $id = Session::get('id'); 

  // 名前を取得 (クロージャー利用) 
  $name = Session::get('username', function () { return '名無し'; }); 

  // ユーザー情報を取得 
  $users = Session::get('users', array()); 

  // ユーザー情報を保存する 
  Session::put('users', null); 

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

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

  // 削除 (指定の値を個別に) 
  Session::forget('key'); 

  // 削除 (全データ) 
  Session::flush(); 
 } 
}

?>

 

使い方

●ヘルパ関数を使って実装してみた。

コントローラーファイルに記述する。
記述前にヘルパ関数を利用するのであれば、頭に

use App\Http\Controllers\Controller;

を記述する。
リクエスト経由やファザードではまた違う記述をするので、チェックする。

試しにセッションに値を保存してみる。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class MemberController extends Controller
{
 //PHP標準の機能で値をセッションに保存する場合の記述
 // $_SESSION['member_login'] = 1;
 // $_SESSION['member_code'] = $rec -> code;
 // $_SESSION['member_name'] = $rec -> name;

 //上記の値をLaravelの機能(ヘルパ関数)でセッションに保存する場合の記述
 session(['member_login' => 1]);
 session(['member_code' => $rec -> code]);
 session(['member_name' => $rec -> name]);
}

?>

 

参考サイト