laravel 會話

Laravel 會話可讓您儲存訊息,並在 Web 應用程式中的請求之間交換訊息。 

Laravel 會話是為目前使用者保留資料的簡單方法。本教程將為您提供在 Laravel 中使用會話的基礎。

預計閱讀時間: 5 minuti

什麼是 Laravel 會話

在 Laravel 中,會話是一種存儲信息的方式,可以正確處理用戶發出的請求。 當用戶啟動 Laravel 應用程序時,會自動為該用戶啟動一個會話。 會話數據存儲在服務器上,一個帶有唯一標識符的小cookie被發送到用戶的瀏覽器以識別會話。

您可以使用會話來存儲要在多個頁面或請求中使用的數據。 例如,您可以將會話用於用戶身份驗證或存儲您希望在應用程序會話期間使用的其他信息。

Laravel 會話設置

要在 Laravel 中使用會話,您必須首先在文件中啟用它們 config/session.php 配置。 在此文件中,可以設置與​​會話相關的配置參數。 例如會話的持續時間、用於存儲會話數據的驅動程序以及會話數據的存儲位置。 

該文件具有以下配置選項:
    • 司機:指定要使用的預設會話驅動程式。 Laravel 支援多種會話驅動程式:檔案、cookie、 數據庫、 apc、memcached、redis、dynamodb 和數組;
    • 一生:指定會話必須被視為有效的分鐘數;
    • 關閉時過期:如果設置為true,當用戶瀏覽器關閉時session將過期;
    • 加密: true 表示框架將在存儲會話數據之前對其進行加密;
    • :如果使用文件會話驅動,該選項指定文件存儲位置;
    • 連接:如果使用會話驅動程式 數據庫,該選項指定連接到 數據庫 使用;
    • :如果使用會話驅動程式 數據庫,該選項指定的表 數據庫 用於儲存會話資料;
    • 抽獎: 一個值數組,用於隨機選擇一個session ID cookie值;
    • 餅乾:此選項指定將用於存儲會話 ID 的 cookie 的名稱。 路徑、域、安全、http_only 和 same_site 選項用於配置會話的 cookie 設置。

    下面是一個文件的例子 sessions.php 會話持續時間 120 秒,使用存儲在目錄中的文件 framework/sessions:

    <?php
    
    use Illuminate\Support\Str;
    
    return [
        'driver' => env('SESSION_DRIVER', 'file'),
        'lifetime' => env('SESSION_LIFETIME', 120),
        'expire_on_close' => false,
        'encrypt' => false,
        'files' => storage_path('framework/sessions'),
        'connection' => env('SESSION_CONNECTION', null),
        'table' => 'sessions',
        'store' => env('SESSION_STORE', null),
        'lottery' => [2, 100],
        'cookie' => env(
            'SESSION_COOKIE',
            Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
        ),
        'path' => '/',
        'domain' => env('SESSION_DOMAIN', null),
        'secure' => env('SESSION_SECURE_COOKIE'),
        'http_only' => true,
    
        'same_site' => 'lax',
    
    ];

    您還可以使用文件中的環境變量配置會話 .env。例如,使用會話驅動程式 數據庫 並將會話資料儲存在會話表中,使用MySQL類型DB,可以設定以下環境變數:

    SESSION_DRIVER=database
    SESSION_LIFETIME=120
    SESSION_CONNECTION=mysql
    SESSION_TABLE=sessions

    設定 Laravel 會話

    在 Laravel 中可以通過三種方式處理會話數據: 

    • 使用helper global session;
    • 使用會話門面;
    • 通過一個 Request instance

    在所有這些情況下,您存儲在會話中的數據將在同一用戶發出的後續請求中可用,直到會話過期或被手動銷毀。

    全局會話助手

    在 Laravel 中,使用函數 Global Session Helper 這是訪問框架提供的會話服務的便捷方式。 它允許您在應用程序的會話中存儲和檢索數據。 下面是一個如何使用 session helper:

    // Store data in the session
    session(['key' => 'value']);
    
    // Retrieve data from the session
    $value = session('key');
    
    // Remove data from the session
    session()->forget('key');
    
    // Clearing the Entire Session
    session()->flush();

    您也可以將預設值作為第二個參數傳遞給函數 session,如果在會話中找不到指定的鍵,將返回:

    $value = session('key', 'default');

    的實例 Session Request

    在 Laravel 中,session 請求實例指的是一個代表 HTTP 請求的對象,它包含請求的相關信息,如請求方法(GET、POST、PUT 等)、請求 URL、請求頭和請求體. 它還包含可用於檢索和操作此信息的各種方法。

    通常,您訪問的實例 Session Request 通過變量 $request 在 Laravel 應用程序中。 例如,可以使用輔助函數通過請求實例訪問會話 session().

    use Illuminate\Http\Request;
    
    class ExampleController extends Controller
    {
       public function example(Request $request)
       {
           // Store data in the session using the put function
           $request->session()->put('key', 'value');
    
           // Retrieve data from the session using the get function
           $value = $request->session()->get('key');
    
           // Check if a value exists in the session using the has function:
           if ($request->session()->has('key')) {
               // The key exists in the session.
           }
    
           // To determine if a value exists in the session, even if its value is null:
           if ($request->session()->exists('users')) {
               // The value exists in the session.
           }
    
           // Remove data from the session using the forget function
           $request->session()->forget('key');
        }
    }
    

    在這個例子中,變量  $request 它是類的一個實例 Illuminate\Http\Request, 表示當前的 HTTP 請求。 功能 session 請求實例返回類的一個實例 Illuminate\Session\Store,它提供了用於處理會話的各種函數。

    相關閱讀

    Ercole Palmeri

    作者