Yii 框架對 PHP 原生 Session 進行了封裝,提供更安全、便捷的操作方式。本文系統梳理 Session 的基本用法、配置選項、資料庫存儲及登出清理等核心知識點。
Yii 預設啟用 autoStart = true,因此無需手動呼叫 session_start()。雖然仍可直接使用 $_SESSION 超全域變數,但官方強烈建議使用 Yii::app()->session 元件,以獲得統一的介面與安全防護。
// 設定 Yii::app()->session['var'] = 'value'; // 讀取 echo Yii::app()->session['var']; // 刪除單個鍵 unset(Yii::app()->session['var']);
protected/config/main.php 的 components 區段)'session' => array(
'autoStart' => true, // 是否自動啟動
'sessionName' => 'SiteAccess', // Cookie 名稱
'cookieMode' => 'only', // 僅透過 Cookie 傳遞 Session ID
'savePath' => '/path/to/dir', // 自訂儲存路徑
),
使用 CDbHttpSession 類別,需指定資料庫連線與資料表名:
'session' => array(
'class' => 'system.web.CDbHttpSession',
'connectionID' => 'db',
'sessionTableName' => 'actual_table_name',
),
Yii::app()->session->sessionID:取得當前 Session ID,便於除錯。Yii::app()->session->clear():清除所有 Session 變數。Yii::app()->session->destroy():銷毀伺服器端 Session 資料(登出時建議先 clear() 再 destroy())。main.php 設定 'sessionTimeoutSeconds'=>300,再於程式中呼叫 Yii::app()->user->setState('userSessionTimeout', time()+Yii::app()->params['sessionTimeoutSeconds'])。合理運用 Yii Session 元件,能有效提升應用的安全性與可維護性。