CodeIgniter (CI) 應用中,視圖文件放在 CI 目錄外部(如 ../page/),控制器在 ../tool/application/controllers/。登錄成功後在控制器中寫入 CI Session,但外部視圖頁面無法讀取該 Session。
$config['cookie_path'] 和 $config['cookie_domain'],默認僅在 CI 應用目錄下有效。// 在 CI 控制器或核心庫中初始化原生 Session
// 建議在 MY_Controller 構造函數或 config.php 中統一處理
if (session_status() === PHP_SESSION_NONE) {
// 設置 Cookie 路徑為根目錄,確保全站共享
session_set_cookie_params(0, '/');
session_start();
}
// 寫入 Session
$_SESSION['user_id'] = $user_id;
$_SESSION['logged_in'] = true;
// 讀取 Session(外部視圖直接使用)
if (isset($_SESSION['logged_in']) && $_SESSION['logged_in']) {
// 已登錄邏輯
}
session_set_cookie_params(0, '/'):設置 Cookie 路徑為根目錄 /,使所有子目錄均可訪問。php.ini 中 session.cookie_path = /。session.cookie_domain = .example.com。| 特性 | CI Session | PHP 原生 Session |
|---|---|---|
| 跨目錄共享 | 需額外配置 Cookie 路徑/域 | 原生支持,設置路徑為 / 即可 |
| 安全性 | 內置加密、旋轉機制 | 需自行實現防劫持措施 |
| 分佈式擴展 | 支持數據庫/Redis 驅動 | 需自行實現或用扩展 |
對於簡單項目或視圖分離場景,直接使用 PHP 原生 Session 並設置 cookie_path=/ 是最快捷有效的方案。若需 CI Session 的高級特性,請正確配置 $config['cookie_path'] 和 $config['cookie_domain'] 並確保視圖域/路徑在覆蓋範圍內。