運(yùn)行時(shí)配置

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

會(huì)話配置選項(xiàng)
名字 默認(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_* 樣式的更多詳情與定義,見(jiàn) 配置可被設(shè)定范圍。

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

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

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

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

警告

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

警告

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

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

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

注意:

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

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

注意: PHP 7.1.0 中移除。 /dev/urandom/dev/arandom 可用的時(shí)候, 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 模式。 開(kāi)啟此模式后,模塊不會(huì)接受未初始化過(guò)的 session ID。 從瀏覽器端傳入未初始化的 session ID 后,將會(huì)發(fā)送一個(gè)新的 session ID 給它。 通過(guò) session 啟用嚴(yán)格模式可固定 session 以保護(hù)應(yīng)用。 默認(rèn)為 0 (禁用)。

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

警告

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

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

注意:

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

session.cookie_path string
session.cookie_path 指定了要設(shè)定會(huì)話 cookie 的路徑。默認(rèn)為 /。參見(jiàn) session_get_cookie_params()session_set_cookie_params()。
session.cookie_domain string
session.cookie_domain 指定了要設(shè)定會(huì)話 cookie 的域名。默認(rèn)為無(wú),表示根據(jù) cookie 規(guī)范產(chǎn)生 cookie 的主機(jī)名。參見(jiàn) session_get_cookie_params()session_set_cookie_params()。
session.cookie_secure bool
session.cookie_secure 指定是否僅通過(guò)安全連接發(fā)送 cookie。默認(rèn)為 off。此設(shè)定是 PHP 4.0.4 添加的。參見(jiàn) session_get_cookie_params()session_set_cookie_params()。
session.cookie_httponly bool
設(shè)置 cookie 僅能夠通過(guò) HTTP 協(xié)議訪問(wèn)。 它意味著 cookie 無(wú)法通過(guò)類似 JavaScript 這樣的腳本語(yǔ)言訪問(wèn)。 該設(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 指定會(huì)話頁(yè)面所使用的緩沖控制方法( none/nocache/ private/ private_no_expire/public)。默認(rèn)為 nocache。參見(jiàn) session_cache_limiter() 文檔查看各個(gè)值的含義。
session.cache_expire int
session.cache_expire 以分鐘數(shù)指定緩沖的會(huì)話頁(yè)面的存活期,此設(shè)定對(duì) nocache 緩沖控制方法無(wú)效。默認(rèn)為 180。參見(jiàn) session_cache_expire()
session.use_trans_sid bool
session.use_trans_sid 指定是否啟用透明 SID 支持。默認(rèn)為 0(禁用)。

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

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

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

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

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è)置合適的值;否則將會(huì)有一個(gè)較弱的 session ID。

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

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

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

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

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

注意:

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

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

注意:

這是 PHP 5 引進(jìn)的。

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ā)生變化時(shí)才需要重新寫(xiě)入。默認(rèn)為開(kāi)啟狀態(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.