PHP 5 Session 設定項詳解 (php.ini)
php.ini 中的 Session 相關指令直接影響 session_start() 等函數行為。以下針對 PHP 5 版本整理所有 Session 設定參數、預設值與說明,修改後需重啟 Web 服務生效。
核心儲存設定
| 指令 | 預設值 | 說明 |
session.save_handler | files | 儲存機制:files (檔案)、user (自定義)、memcached、redis 等。 |
session.save_path | /tmp | 檔案儲存路徑 (save_handler=files 時)。確保目錄可寫、權限安全 (建議 600/700)。 |
session.serialize_handler | php | 序列化引擎:php (預設)、php_binary、wddx、igbinary 等。 |
Cookie 相關設定
| 指令 | 預設值 | 說明 |
session.use_cookies | 1 | 是否使用 Cookie 傳遞 Session ID (1=啟用)。 |
session.name | PHPSESSID | Session Cookie 名稱。 |
session.auto_start | 0 | 請求自動啟動 Session (1=啟用)。建議 0,由程式控制。 |
session.cookie_lifetime | 0 | Cookie 生存期 (秒)。0 = 瀏覽器關閉即失效 (Session Cookie)。 |
session.cookie_path | / | Cookie 有效路徑。 |
session.cookie_domain | (空) | Cookie 有效域名。空 = 當前域名;設為 .example.com 可跨子域共享。 |
session.cookie_secure | 0 | 僅 HTTPS 傳送 Cookie (需 HTTPS 環境)。 |
session.cookie_httponly | 1 (PHP 5.2+) | 禁止 JS 存取 Cookie (防 XSS 竊取)。 |
session.cookie_samesite | (PHP 7.3+) | SameSite 屬性:Lax/Strict/None。 |
垃圾回收 (GC) 設定
| 指令 | 預設值 | 說明 |
session.gc_probability | 1 | GC 啟動機率分子。 |
session.gc_divisor | 1000 | GC 啟動機率分母。啟動機率 = probability/divisor (預設 0.1%)。 |
session.gc_maxlifetime | 1440 | Session 資料最大生存秒數 (24 分鐘)。超過視為垃圾被清除。 |
注意: 若多專案共用 save_path,GC 可能誤刪他專案 Session。建議各專案設定獨立 save_path 或使用資料庫/Redis 儲存。
相容性與安全設定
| 指令 | 預設值 | 說明 |
session.bug_compat_42 | 0 | PHP 4.2 相容模式 (已棄用)。 |
session.bug_compat_warn | 1 | 相容模式警告。 |
session.referer_check | (空) | 檢查 HTTP Referer 含此字串,否則拒絕 Session ID (防 CSRF 輔助)。 |
session.entropy_length | 0 | 額外熵來源長度 (位元)。 |
session.entropy_file | (空) | 熵來源檔案 (如 /dev/urandom),增強 Session ID 隨機性。 |
session.hash_function | 0 (MD5) | Session ID 雜湊演算法:0=MD5(128bit)、1=SHA-1(160bit)。 |
session.hash_bits_per_character | 5 | 每字元位元數:4=0-9a-f、5=0-9a-v、6=0-9a-zA-Z,-。值越大 ID 越短。 |
session.use_trans_sid | 0 | 透明 Session ID (自動附加到 URL)。0=關閉 (安全建議)。 |
快取控制
| 指令 | 預設值 | 說明 |
session.cache_limiter | nocache | 快取控制標頭:nocache/private/public/private_no_expire。 |
session.cache_expire | 180 | 快取文件過期分鐘數 (cache_limiter≠nocache 時)。 |
URL 重寫標籤
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
當 use_trans_sid=1 時,輸出緩衝區會自動在這些標籤屬性加入 Session ID。
修改後生效步驟
- 編輯
php.ini。
- 重啟 Web 服務:
systemctl restart php-fpm / apachectl restart / nginx -s reload (視架構)。
- 用
phpinfo() 或 ini_get('session.save_path') 驗證。
生產環境建議最小調整
session.save_path = /var/lib/php/sessions_你的專案 ; 獨立目錄
session.cookie_httponly = 1
session.cookie_secure = 1 ; 僅 HTTPS
session.cookie_samesite = Lax
session.gc_maxlifetime = 7200 ; 2 小時
session.gc_probability = 1
session.gc_divisor = 1000
session.use_trans_sid = 0