在 app/Config/core.php 中設定 Configure::write('Session.save', ...):
| 值 | 說明 | 適用場景 |
|---|---|---|
'cake' | 儲存於 app/tmp/sessions/ 檔案 | 單機、簡單部署 |
'php' | 使用 PHP 原生 session.save_path | 預設、共享儲存(如 NFS) |
'database' | 序列化存入資料表 | 叢集、需持久化、跨伺服器共享 |
app/Config/sql/sessions.sql 建立 cake_sessions 表。core.php 設定:Configure::write('Session.save', 'database');
Configure::write('Session.model', 'Session'); // 對應模型名
Configure::write('Session.database', 'default'); // 使用的資料庫連線
所有 Controller 預設可用 $this->Session。
| 方法 | 用途 |
|---|---|
check($name) | 檢查 Session 是否存在鍵值 |
read($name) | 讀取指定鍵值 |
write($name, $value) | 寫入鍵值 |
delete($name) / del() | 刪除指定鍵值 |
setFlash($msg, $layout='default', $params=[], $key='flash') | 寫入一次性提示訊息 |
flash($key='flash') | 讀取並刪除一次性提示 |
renew() | 重新生成 Session ID,避免固定攻擊 |
valid() | 檢查 Session 是否有效(建議 read() 前呼叫) |
error() | 取得最近錯誤,供除錯用 |
$layout = 'default':輸出 <div id="flashMessage">$msg</div>$layout = '':直接輸出原始訊息app/View/Elements/{$layout}.ctpdatabase 或 memcached/redis(需額外擴充套件)儲存 Session。