什麼是 Session
HTTP 是無狀態的協定,本身沒有跨請求保留使用者資訊的機制。 Laravel 的 session 功能提供在多個請求之間保留使用者資料的方法。 登入狀態、購物車商品、表單輸入中的資料等,需在請求之間保留的資訊皆可存到 session。Session Driver 的設定
Session 設定寫在config/session.php。
可用 SESSION_DRIVER 環境變數(.env)切換 driver。
Laravel 預設專案已設定
database driver。使用 database driver 需要 sessions 資料表,但預設 migration 已包含,可直接使用。存取 Session 的方法
存取 session 有兩種方式:透過Request 實例的方法,或使用全域 helper session()。
使用 Request 實例
在 controller 方法以Request type-hint 接收,並用 $request->session() 存取 session。
使用全域 helper session()
session() helper 函式可在 controller、view 等任何位置呼叫。
Session 的操作
取得資料
檢查資料存在
has 與 exists 的差異:
儲存資料
刪除資料
Flash 資料
Flash 資料是僅在下一次請求有效的 session 資料。 用於表單送出完成訊息、錯誤訊息等只想顯示一次的資訊。用 flash() 儲存資料
延長 flash 資料
在 Blade 顯示 flash 訊息
實用範例:表單送出後的訊息顯示
送出表單後將成功訊息存到 session 並 redirect,在下個頁面顯示,是 Web 應用的常見模式。1
定義路由
2
Controller 的實作
在接收表單送出的
store 方法中,儲存後附帶成功訊息 redirect。redirect()->with('success', '...') 是將 flash 資料傳到 redirect 目的地的捷徑。3
在 layout 顯示訊息
在
resources/views/layouts/app.blade.php 加入 flash 訊息的顯示部分。4
建立列表頁的 view
與驗證錯誤結合的模式
驗證失敗時搭配back()->withErrors() 使用。
Laravel 於驗證失敗時會自動將錯誤保留為 flash 資料,Blade 中可使用 $errors 變數。
後續步驟
Validation
確認如何以 validation 驗證表單的輸入資料。