Yii 封裝了 CHttpSession 組件,默認 autoStart=true,無需手動 session_start()。本文涵蓋基礎讀寫、配置自定義存儲(文件/數據庫)、Session ID 獲取、銷毀流程。
session_start() 才能使用 $_SESSION。autoStart=true 時自動啟動,**直接使用 Yii::app()->session** 即可,底層已調用 session_start()。$_SESSION 全局變量,但建議統一用組件方式,便於遷移存儲引擎。// 設置 Yii::app()->session['var'] = 'value'; // 讀取 echo Yii::app()->session['var']; // 刪除單個 unset(Yii::app()->session['var']); // 判斷存在 isset(Yii::app()->session['var'])
'components' => array(
'session' => array(
'autoStart' => true, // 是否自動啟動
'sessionName' => 'MyAppSess', // 自定義 Cookie 名(默認 PHPSESSID)
'cookieMode' => 'only', // 只用 Cookie 傳輸 SID,禁用 URL 透傳
'savePath' => '/var/lib/php/session', // 文件存儲目錄(需可寫)
'timeout' => 1800, // 30 分鐘過期(秒)
),
),
'session' => array(
'class' => 'system.web.CDbHttpSession',
'connectionID' => 'db', // 數據庫連接組件 ID
'sessionTableName' => 'yii_session', // 表名(需預建表)
),
建表 SQL(MySQL):
CREATE TABLE `yii_session` (
`id` CHAR(32) NOT NULL PRIMARY KEY,
`expire` INT(11) NOT NULL,
`data` BLOB NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
// 獲取當前 Session ID $sessionId = Yii::app()->session->sessionID; // 用戶登出:清空數據並銷毀服務端存儲 Yii::app()->session->clear(); // 刪除所有 $_SESSION 變量 Yii::app()->session->destroy(); // 刪除服務端 Session 文件/數據庫記錄
savePath** 到專用目錄,避免系統 /tmp 被清理導致 Session 丟失。cookieMode => 'only' 防止 SID 暴露在 URL 中(安全加分項)。