預設 Session 檔案全存於 /tmp,單一目錄檔案過多導致 inode 耗盡、目錄讀取變慢。啟用多級雜湊目錄可大幅改善。
; 2 級目錄,儲存於 /tmp/session session.save_path = "2;/tmp/session" ; 雜湊函式:1=SHA-1 (建議) session.hash_function = 1 ; 每字元位元數:5 (字元集 0-9,a-v),目錄數 32^2=1024 session.hash_bits_per_character = 5
PHP 原始碼附帶 ext/session/mod_files.sh:
cd /path/to/php-source/ext/session chmod +x mod_files.sh # 參數:基礎路徑、層級、hash_bits_per_character ./mod_files.sh /tmp/session 2 5
將建立 /tmp/session/0/0 ... /tmp/session/v/v 共 1024 個子目錄。
chown www-data:www-data /tmp/session
chmod 700 /tmp/session
# 遞迴套用子目錄權限
find /tmp/session -type d -exec chmod 700 {} \;
補充說明
session.hash_function=1 (SHA-1) 比 MD5 更難碰撞,安全性較高。hash_bits_per_character=5 產生的 Session ID 長度為 32 字元(160 bits / 5 = 32),目錄分佈均勻。3;/tmp/session 三級目錄(32^3=32768 目錄)。find /tmp/session -type f -cmin +24 -delete(配合 gc_maxlifetime)。