Session 是用來「識別使用者」並「保存狀態」的機制,儲存位置依設定可為檔案、資料庫、Redis、Memcached 等。Laravel 預設使用檔案儲存,位置為 storage/framework/sessions/。
Session
Redis
Memcached
storage/framework/sessions/
Cookie 是一種瀏覽器端的儲存機制,適合用來保存非敏感的使用者偏好資料,如語系、主題等。
Cookie
SESSION_LIFETIME
expires
max-age
使用者首次造訪網站:
abcdef123456
laravel_session
storage/framework/sessions/abcdef123456
使用者再次發送請求:
laravel_session=abcdef123456
🚀 實際的資料存於伺服器,Cookie 僅用來儲存識別碼,因此較安全且使用者無法竄改。
// Laravel 設定 Cookie(Queue 方式會在回應時設定) Cookie::queue('user_lang', 'zh-TW', 60); // 存放 60 分鐘
// 瀏覽器接收到的 Set-Cookie 標頭: Set-Cookie: user_lang=zh-TW; expires=Wed, 20 Mar 2025 12:00:00 GMT;
// 使用者下一次請求時會自動帶上: Cookie: user_lang=zh-TW
🚨 Cookie 資料完全儲存在使用者瀏覽器中,容易被修改,因此不建議儲存登入狀態、權限或敏感資料。
EncryptCookies
🧠 參考文件:
Laravel Session vs Cookie
介紹
說明
Session是用來「識別使用者」並「保存狀態」的機制,儲存位置依設定可為檔案、資料庫、Redis、Memcached等。Laravel 預設使用檔案儲存,位置為storage/framework/sessions/。Cookie是一種瀏覽器端的儲存機制,適合用來保存非敏感的使用者偏好資料,如語系、主題等。比較
storage/framework/sessions/)SESSION_LIFETIME控制expires或max-age運作方式
Session(檔案)運作方式
使用者首次造訪網站:
abcdef123456。laravel_session)。storage/framework/sessions/abcdef123456。使用者再次發送請求:
laravel_session=abcdef123456。🚀 實際的資料存於伺服器,Cookie 僅用來儲存識別碼,因此較安全且使用者無法竄改。
Cookie 運作方式
// Laravel 設定 Cookie(Queue 方式會在回應時設定) Cookie::queue('user_lang', 'zh-TW', 60); // 存放 60 分鐘// 瀏覽器接收到的 Set-Cookie 標頭: Set-Cookie: user_lang=zh-TW; expires=Wed, 20 Mar 2025 12:00:00 GMT;// 使用者下一次請求時會自動帶上: Cookie: user_lang=zh-TW🚨 Cookie 資料完全儲存在使用者瀏覽器中,容易被修改,因此不建議儲存登入狀態、權限或敏感資料。
延伸補充
EncryptCookies中介層會自動加密與解密 Cookie,使其內容在用戶端無法直接讀取,但仍可能被竄改並重新加密,因此安全性不如 Session。Session;若為個人化 UI 偏好,則可使用Cookie。🧠 參考文件: