CodeIgniter Session錯誤問題
Contents
CodeIgniter 的 Session 預設使用檔案方式儲存,在某些環境(特別是 Docker 容器)下可能因為路徑或權限問題導致 Session 無法正常運作,以下整理常見問題與解決方式。
Session 路徑設定
在 application/config/config.php 中設定 Session 儲存路徑:
|
|
或使用絕對路徑,更為明確:
|
|
確保這個目錄存在,且 Web server 的執行使用者有寫入權限。
目錄權限設定
Session 目錄必須對 Web server 使用者(通常是 www-data)可寫:
|
|
若使用 Docker,則需要確認容器內的使用者身份,並給予對應權限。
Docker 環境的特殊注意事項
在 Docker 容器中,常見的 Session 問題包括:
-
容器重啟後 Session 檔案消失:Session 目錄若在容器內部(非 Volume),容器重啟後資料會消失。解決方式:將 Session 目錄掛載為 Docker Volume。
1 2 3# docker-compose.yml volumes: - ./session_file:/var/www/html/session_file -
權限不一致:Host 端掛載的目錄,使用者 UID 可能與容器內的
www-data不同,導致無法寫入。 -
建議改用 Redis 或資料庫儲存 Session:在容器化環境中,File Session 較難管理,建議改用 Redis Session。
使用資料庫儲存 Session(更穩定)
|
|
需要先建立 ci_sessions 資料表,CodeIgniter 文件中有提供對應的 SQL。
診斷步驟
- 確認
sess_save_path指向的目錄存在 - 確認目錄對 Web server 使用者有讀寫權限(
chmod 755或777) - 查看 PHP error log 中是否有 Session 相關的錯誤訊息
- 若使用 Docker,確認 Session 目錄是否已掛載為 Volume