運行時配置

這些函數(shù)的行為受 php.ini 中的設(shè)置影響。

會話配置選項
名字 默認(rèn) 可修改范圍 更新日志
session.save_path "" PHP_INI_ALL  
session.name "PHPSESSID" PHP_INI_ALL  
session.save_handler "files" PHP_INI_ALL  
session.auto_start "0" PHP_INI_PERDIR  
session.gc_probability "1" PHP_INI_ALL  
session.gc_divisor "100" PHP_INI_ALL  
session.gc_maxlifetime "1440" PHP_INI_ALL  
session.serialize_handler "php" PHP_INI_ALL  
session.cookie_lifetime "0" PHP_INI_ALL  
session.cookie_path "/" PHP_INI_ALL  
session.cookie_domain "" PHP_INI_ALL  
session.cookie_secure "0" PHP_INI_ALL 在 PHP 7.2.0 之前,默認(rèn)值是 ""。
session.cookie_httponly "0" PHP_INI_ALL 在 PHP 7.2.0 之前,默認(rèn)值是 ""。
session.cookie_samesite "" PHP_INI_ALL 自 PHP 7.3.0 起有效
session.use_strict_mode "0" PHP_INI_ALL 自 PHP 5.5.2 起有效
session.use_cookies "1" PHP_INI_ALL  
session.use_only_cookies "1" PHP_INI_ALL  
session.referer_check "" PHP_INI_ALL  
session.cache_limiter "nocache" PHP_INI_ALL  
session.cache_expire "180" PHP_INI_ALL  
session.use_trans_sid "0" PHP_INI_ALL  
session.trans_sid_tags "a=href,area=href,frame=src,form=" PHP_INI_ALL 自 PHP 7.1.0 起有效。
session.trans_sid_hosts $_SERVER['HTTP_HOST'] PHP_INI_ALL 自 PHP 7.1.0 起有效。
session.sid_length "32" PHP_INI_ALL 自 PHP 7.1.0 起有效。
session.sid_bits_per_character "4" PHP_INI_ALL 自 PHP 7.1.0 起有效。
session.upload_progress.enabled "1" PHP_INI_PERDIR  
session.upload_progress.cleanup "1" PHP_INI_PERDIR  
session.upload_progress.prefix "upload_progress_" PHP_INI_PERDIR  
session.upload_progress.name "PHP_SESSION_UPLOAD_PROGRESS" PHP_INI_PERDIR  
session.upload_progress.freq "1%" PHP_INI_PERDIR  
session.upload_progress.min_freq "1" PHP_INI_PERDIR  
session.lazy_write "1" PHP_INI_ALL  
session.hash_function "0" PHP_INI_ALL 自 PHP 7.1.0 起移除。
session.hash_bits_per_character "4" PHP_INI_ALL 自 PHP 7.1.0 起移除。
session.entropy_file "" PHP_INI_ALL 自 PHP 7.1.0 起移除。
session.entropy_length "0" PHP_INI_ALL 自 PHP 7.1.0 起移除。
有關(guān) PHP_INI_* 樣式的更多詳情與定義,見 配置可被設(shè)定范圍

會話管理系統(tǒng)支持許多配置選項,可以在自己的 php.ini 文件中設(shè)定。這里只是個簡短的概覽。

session.save_handler string
session.save_handler 定義處理器(handler)名稱,可以獲取/儲存關(guān)聯(lián) session 數(shù)據(jù)。 默認(rèn)為 files。 注意不同的擴展可能會注冊它們各自的 save_handlerphpinfo() 提到的預(yù)裝數(shù)據(jù),包含了注冊過的 hander。 可以參考 session_set_save_handler()
session.save_path string
session.save_path 定義了傳遞給存儲處理器的參數(shù)。如果選擇了默認(rèn)的 files 文件處理器,則此值是創(chuàng)建文件的路徑。默認(rèn)為 /tmp。參見 session_save_path()。

此指令還有一個可選的 N 參數(shù)來決定會話文件分布的目錄深度。例如,設(shè)定為 '5;/tmp' 將使創(chuàng)建的會話文件和路徑類似于 /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。要使用 N 參數(shù),必須在使用前先創(chuàng)建好這些目錄。在 ext/session 目錄下有個小的 shell 腳本名叫 mod_files.sh,windows 版本是 mod_files.bat 可以用來做這件事。此外注意如果使用了 N 參數(shù)并且大于 0,那么將不會執(zhí)行自動垃圾回收,更多信息見 php.ini。另外如果用了 N 參數(shù),要確保將 session.save_path 的值用雙引號 "quotes" 括起來,因為分隔符分號( ;)在 php.ini 中也是注釋符號。

文件儲存模塊默認(rèn)使用 mode 600 創(chuàng)建文件。通過 修改可選參數(shù) MODE 來改變這種默認(rèn)行為: N;MODE;/path ,其中 MODE 是 mode 的八進制表示。 MODE 設(shè)置不影響進程的掩碼(umask)。

警告

如果將此設(shè)定為一個全局可讀的目錄,例如 /tmp(默認(rèn)值),服務(wù)器上的其他用戶有可能通過該目錄的文件列表破解會話。

警告

使用以上描述的可選目錄層級參數(shù) N 時請注意,對于絕大多數(shù)站點, 大于1或者2的值會不太合適——因為這需要創(chuàng)建大量的目錄: 例如,值設(shè)置為 3 需要在文件系統(tǒng)上創(chuàng)建 64^3 個目錄, 將浪費很多空間和 inode。

僅僅在絕對肯定站點足夠大時,才可以設(shè)置 N 大于2。

session.name string
session.name 指定會話名以用做 cookie 的名字。只能由字母數(shù)字組成,默認(rèn)為 PHPSESSID。參見 session_name()。
session.auto_start bool
session.auto_start 指定會話模塊是否在請求開始時自動啟動一個會話。默認(rèn)為 0(不啟動)。
session.serialize_handler string
session.serialize_handler 定義用來序列化/反序列化的處理器名字。 當(dāng)前支持 PHP 序列化格式 (名為 php_serialize)、 PHP PHP 內(nèi)部格式 (名為 phpphp_binary) 和 WDDX (名為 wddx)。 如果 PHP 編譯時加入了 WDDX 支持,則只能用 WDDX。 php_serialize 在內(nèi)部簡單地直接使用 serialize/unserialize 函數(shù),并且不會有 phpphp_binary 所具有的限制。 使用較舊的序列化處理器導(dǎo)致 $_SESSION 的索引既不能是數(shù)字也不能包含特殊字符(| and !) 。 使用 php_serialize 避免腳本退出時,數(shù)字及特殊字符索引導(dǎo)致出錯。 默認(rèn)使用 php。
session.gc_probability int
session.gc_probabilitysession.gc_divisor 合起來用來管理 gc(garbage collection 垃圾回收)進程啟動的概率。默認(rèn)為 1。詳見 session.gc_divisor。
session.gc_divisor int
session.gc_divisorsession.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 垃圾回收)進程的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 進程。session.gc_divisor 默認(rèn)為 100
session.gc_maxlifetime int
session.gc_maxlifetime 指定過了多少秒之后數(shù)據(jù)就會被視為“垃圾”并被清除。 垃圾搜集可能會在 session 啟動的時候開始( 取決于session.gc_probabilitysession.gc_divisor)。

注意:

如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個地方存儲會話數(shù)據(jù),則具有最小數(shù)值的腳本會清理數(shù)據(jù)。此情況下,與 session.save_path 一起使用本指令。

session.referer_check string
session.referer_check 包含有用來檢查每個 HTTP Referer 的子串。如果客戶端發(fā)送了 Referer 信息但是在其中并未找到該子串,則嵌入的會話 ID 會被標(biāo)記為無效。默認(rèn)為空字符串。
session.entropy_file string
session.entropy_file 給出了一個到外部資源(文件)的路徑,該資源將在會話 ID 創(chuàng)建進程中被用作附加的熵值資源。例如在許多 Unix 系統(tǒng)下都可以用 /dev/random/dev/urandom。 在 Windows 上也支持此功能。 設(shè)置 session.entropy_length 為非零的值將使 PHP 使用 Windows Random API 作為熵值源。

注意: PHP 7.1.0 中移除。 /dev/urandom/dev/arandom 可用的時候, session.entropy_file 默認(rèn)使用它們。

session.entropy_length int
session.entropy_length 指定了從上面的文件中讀取的字節(jié)數(shù)。默認(rèn)為 0(禁用)。 PHP 7.1.0 中移除。
session.use_strict_mode bool
session.use_strict_mode 設(shè)置是否啟用嚴(yán)格 session id 模式。 開啟此模式后,模塊不會接受未初始化過的 session ID。 從瀏覽器端傳入未初始化的 session ID 后,將會發(fā)送一個新的 session ID 給它。 通過 session 啟用嚴(yán)格模式可固定 session 以保護應(yīng)用。 默認(rèn)為 0 (禁用)。

注意: 開啟 session.use_strict_mode 是常規(guī)的 session 安全強制性措施。 建議所有站點都開啟此模式。 可以參考 session_create_id() 例子中的代碼。

警告

如果 session_set_save_handler() 注冊的自定義 session 處理器 沒有實現(xiàn) SessionUpdateTimestampHandlerInterface::validateId(), 也沒有相應(yīng)提供 validate_sid 回調(diào),那么無論上述指令的值如何設(shè)置, 實際上嚴(yán)格 session ID 模式都是關(guān)閉狀態(tài)的。 尤其需要注意沒有 實現(xiàn) SessionHandler::validateId()SessionHandler。

session.use_cookies bool
session.use_cookies 指定是否在客戶端用 cookie 來存放會話 ID。默認(rèn)為 1(啟用)。
session.use_only_cookies bool
session.use_only_cookies 指定是否在客戶端僅僅使用 cookie 來存放會話 ID。。啟用此設(shè)定可以防止有關(guān)通過 URL 傳遞會話 ID 的攻擊。默認(rèn)值為1(啟用)
session.cookie_lifetime int
session.cookie_lifetime 以秒數(shù)指定了發(fā)送到瀏覽器的 cookie 的生命周期。值為 0 表示“直到關(guān)閉瀏覽器”。默認(rèn)為 0。參見 session_get_cookie_params()session_set_cookie_params()。

注意:

過期時間是根據(jù)服務(wù)器時間設(shè)置的, 它沒有必要和瀏覽器端的時間一致。

session.cookie_path string
session.cookie_path 指定了要設(shè)定會話 cookie 的路徑。默認(rèn)為 /。參見 session_get_cookie_params()session_set_cookie_params()
session.cookie_domain string
session.cookie_domain 指定了要設(shè)定會話 cookie 的域名。默認(rèn)為無,表示根據(jù) cookie 規(guī)范產(chǎn)生 cookie 的主機名。參見 session_get_cookie_params()session_set_cookie_params()。
session.cookie_secure bool
session.cookie_secure 指定是否僅通過安全連接發(fā)送 cookie。默認(rèn)為 off。此設(shè)定是 PHP 4.0.4 添加的。參見 session_get_cookie_params()session_set_cookie_params()
session.cookie_httponly bool
設(shè)置 cookie 僅能夠通過 HTTP 協(xié)議訪問。 它意味著 cookie 無法通過類似 JavaScript 這樣的腳本語言訪問。 該設(shè)置可有效避免 XSS 攻擊竊取身份(但并非所有瀏覽器都支持)。
session.cookie_samesite string
Allows servers to assert that a cookie ought not to be sent along with cross-site requests. This assertion allows user agents to mitigate the risk of cross-origin information leakage, and provides some protection against cross-site request forgery attacks. Note that this is not supported by all browsers. An empty value means that no SameSite cookie attribute will be set. Lax and Strict mean that the cookie will not be sent cross-domain for POST requests; Lax will sent the cookie for cross-domain GET requests, while Strict will not.
session.cache_limiter string
session.cache_limiter 指定會話頁面所使用的緩沖控制方法( none/nocache/ private/ private_no_expire/public)。默認(rèn)為 nocache。參見 session_cache_limiter() 文檔查看各個值的含義。
session.cache_expire int
session.cache_expire 以分鐘數(shù)指定緩沖的會話頁面的存活期,此設(shè)定對 nocache 緩沖控制方法無效。默認(rèn)為 180。參見 session_cache_expire()。
session.use_trans_sid bool
session.use_trans_sid 指定是否啟用透明 SID 支持。默認(rèn)為 0(禁用)。

注意: 基于 URL 的會話管理比基于 cookie 的會話管理有更多安全風(fēng)險。例如用戶有可能通過 email 將一個包含有效的會話 ID 的 URL 發(fā)給他的朋友,或者用戶總是有可能在收藏夾中存有一個包含會話 ID 的 URL 來以同樣的會話 ID 去訪問站點。 自 PHP 7.1.0 開始,透明 SID 開始使用完整的 URL 絕對路徑,例如 https://php.net/。 在此之前 PHP 只會使用相對路徑。使用 session.trans_sid_hosts 定義重寫的目標(biāo) host。

session.trans_sid_tags string
開啟支持透明 sid 時, session.trans_sid_tags 指定是否需要重寫 HTML 標(biāo)簽來包含 session id。 默認(rèn)為 a=href,area=href,frame=src,input=src,form= form 是個特殊標(biāo)簽。 <input hidden="session_id" name="session_name"> 作為表單變量添加。

注意: PHP 7.1.0 之前,url_rewriter.tags 用于此目的。 PHP 7.1.0 之后,fieldset 不再作為特殊標(biāo)簽對待。

session.trans_sid_hosts string
當(dāng)透明 sid 支持開啟時,session.trans_sid_hosts 設(shè)置了要重寫包含 session 的主機名, 默認(rèn)為 $_SERVER['HTTP_HOST']。 多個主機用半角逗號 "," 分隔;主機名之間不能用空格。 例如 php.net,wiki.php.net,bugs.php.net。
session.sid_length int
通過 session.sid_length 可以設(shè)置 session ID 字符串長度。 Session ID 的長度可以是在 22 到 256 之間。 默認(rèn)是 32。 如果需要較好的兼容性可以設(shè)置為 32、40 等。 較長的 session ID 會更難猜測。 推薦至少要 32 個字符。
小技巧

Compatibility Note: Use 32 instead of session.hash_function=0 (MD5) and session.hash_bits_per_character=4, session.hash_function=1 (SHA1) and session.hash_bits_per_character=6. Use 26 instead of session.hash_function=0 (MD5) and session.hash_bits_per_character=5. Use 22 instead of session.hash_function=0 (MD5) and session.hash_bits_per_character=6. 必須正確配置 INI 值,讓 session ID 至少有 128 比特(bits)。 不要忘了為 session.sid_bits_per_character 設(shè)置合適的值;否則將會有一個較弱的 session ID。

注意: PHP 7.1.0 中加入該設(shè)置。

session.sid_bits_per_character int
session.sid_bits_per_character 設(shè)置要編碼 session ID 字符的比特數(shù)。 可能的設(shè)置有: '4'(0-9、a-f)、'5'(0-9、a-v)、'6'(0-9、a-z、A-Z、"-"、",")。 默認(rèn)為 4。 更多的比特數(shù)會產(chǎn)生更強健的 session ID。 對于絕大多數(shù)環(huán)境,推薦值是 5。

注意: PHP 7.1.0 中加入該設(shè)置。

session.hash_function mixed
session.hash_function 允許用戶指定生成會話 ID 的散列算法。'0' 表示 MD5(128 位),'1' 表示 SHA-1(160 位)。

還可以指定 hash 擴展(開啟的時候) 支持的任意算法,例如 sha512whirlpool。 可通過 hash_algos() 函數(shù)獲取支持的算法完整名單。

注意:

PHP 7.1.0 中已經(jīng)移除。

session.hash_bits_per_character int
session.hash_bits_per_character 允許用戶定義將二進制散列數(shù)據(jù)轉(zhuǎn)換為可讀的格式時每個字符存放多少個比特。可能值為 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-",",")。

注意:

這是 PHP 5 引進的。

session.upload_progress.enabled boolean
Enables upload progress tracking, populating the $_SESSION variable. Defaults to 1, enabled.
session.upload_progress.cleanup boolean
Cleanup the progress information as soon as all POST data has been read (i.e. upload completed). Defaults to 1, enabled.

注意: It is highly recommended to keep this feature enabled.

session.upload_progress.prefix string
A prefix used for the upload progress key in the $_SESSION. This key will be concatenated with the value of $_POST[ini_get("session.upload_progress.name")] to provide a unique index. Defaults to "upload_progress_".
session.upload_progress.name string
The name of the key to be used in $_SESSION storing the progress information. See also session.upload_progress.prefix. If $_POST[ini_get("session.upload_progress.name")] is not passed or available, upload progressing will not be recorded. Defaults to "PHP_SESSION_UPLOAD_PROGRESS".
session.upload_progress.freq mixed
Defines how often the upload progress information should be updated. This can be defined in bytes (i.e. "update progress information after every 100 bytes"), or in percentages (i.e. "update progress information after receiving every 1% of the whole filesize"). Defaults to "1%".
session.upload_progress.min_freq int
The minimum delay between updates, in seconds. Defaults to "1" (one second).
session.lazy_write bool
session.lazy_write,設(shè)置成 1 的含義是: 只有 session 數(shù)據(jù)發(fā)生變化時才需要重新寫入。默認(rèn)為開啟狀態(tài) 1。

Upload progress will not be registered unless session.upload_progress.enabled is enabled, and the $_POST[ini_get("session.upload_progress.name")] variable is set. See Session Upload Progress for mor details on this functionality.