這些函數的行為受 php.ini 中的設置影響。
名字 | 默認 | 可修改范圍 | 更新日志 |
---|---|---|---|
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 之前,默認值是 "" 。 |
session.cookie_httponly | "0" | PHP_INI_ALL | 在 PHP 7.2.0 之前,默認值是 "" 。 |
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 起移除。 |
會(huì )話(huà)管理系統支持許多配置選項,可以在自己的 php.ini 文件中設定。這里只是個(gè)簡(jiǎn)短的概覽。
session.save_handler
string
session.save_handler
定義處理器(handler)名稱(chēng),可以獲取/儲存關(guān)聯(lián) session 數據。
默認為
files
。
注意不同的擴展可能會(huì )注冊它們各自的 save_handler
。
phpinfo() 提到的預裝數據,包含了注冊過(guò)的 hander。
可以參考 session_set_save_handler()。
session.save_path
string
session.save_path
定義了傳遞給存儲處理器的參數。如果選擇了默認的
files 文件處理器,則此值是創(chuàng )建文件的路徑。默認為
/tmp
。參見(jiàn)
session_save_path()。
此指令還有一個(gè)可選的 N
參數來(lái)決定會(huì )話(huà)文件分布的目錄深度。例如,設定為
'5;/tmp'
將使創(chuàng )建的會(huì )話(huà)文件和路徑類(lèi)似于
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If
。要使用
N
參數,必須在使用前先創(chuàng )建好這些目錄。在 ext/session
目錄下有個(gè)小的 shell 腳本名叫 mod_files.sh,windows 版本是 mod_files.bat
可以用來(lái)做這件事。此外注意如果使用了 N
參數并且大于
0,那么將不會(huì )執行自動(dòng)垃圾回收,更多信息見(jiàn) php.ini。另外如果用了 N
參數,要確保將 session.save_path
的值用雙引號 "quotes"
括起來(lái),因為分隔符分號( ;
)在 php.ini 中也是注釋符號。
文件儲存模塊默認使用 mode 600 創(chuàng )建文件。通過(guò) 修改可選參數 MODE
來(lái)改變這種默認行為:
N;MODE;/path
,其中 MODE
是 mode 的八進(jìn)制表示。
MODE
設置不影響進(jìn)程的掩碼(umask)。
如果將此設定為一個(gè)全局可讀的目錄,例如 /tmp(默認值),服務(wù)器上的其他用戶(hù)有可能通過(guò)該目錄的文件列表破解會(huì )話(huà)。
使用以上描述的可選目錄層級參數 N
時(shí)請注意,對于絕大多數站點(diǎn),
大于1或者2的值會(huì )不太合適——因為這需要創(chuàng )建大量的目錄:
例如,值設置為 3 需要在文件系統上創(chuàng )建 64^3
個(gè)目錄,
將浪費很多空間和 inode。
僅僅在絕對肯定站點(diǎn)足夠大時(shí),才可以設置 N
大于2。
session.name
string
session.name
指定會(huì )話(huà)名以用做 cookie 的名字。只能由字母數字組成,默認為
PHPSESSID
。參見(jiàn) session_name()。
session.auto_start
bool
session.auto_start
指定會(huì )話(huà)模塊是否在請求開(kāi)始時(shí)自動(dòng)啟動(dòng)一個(gè)會(huì )話(huà)。默認為
0
(不啟動(dòng))。
session.serialize_handler
string
session.serialize_handler
定義用來(lái)序列化/反序列化的處理器名字。
當前支持 PHP 序列化格式 (名為 php_serialize
)、 PHP
PHP 內部格式 (名為 php
及
php_binary
) 和 WDDX (名為
wddx
)。
如果 PHP 編譯時(shí)加入了 WDDX
支持,則只能用 WDDX。
php_serialize
在內部簡(jiǎn)單地直接使用
serialize/unserialize 函數,并且不會(huì )有 php
和 php_binary
所具有的限制。
使用較舊的序列化處理器導致 $_SESSION 的索引既不能是數字也不能包含特殊字符(|
and !
) 。
使用 php_serialize
避免腳本退出時(shí),數字及特殊字符索引導致出錯。
默認使用
php
。
session.gc_probability
int
session.gc_probability
與
session.gc_divisor
合起來(lái)用來(lái)管理 gc(garbage collection
垃圾回收)進(jìn)程啟動(dòng)的概率。默認為 1
。詳見(jiàn) session.gc_divisor。
session.gc_divisor
int
session.gc_divisor
與
session.gc_probability
合起來(lái)定義了在每個(gè)會(huì )話(huà)初始化時(shí)啟動(dòng)
gc(garbage collection 垃圾回收)進(jìn)程的概率。此概率用
gc_probability/gc_divisor 計算得來(lái)。例如 1/100
意味著(zhù)在每個(gè)請求中有 1% 的概率啟動(dòng) gc 進(jìn)程。session.gc_divisor
默認為 100
。
session.gc_maxlifetime
int
session.gc_maxlifetime
指定過(guò)了多少秒之后數據就會(huì )被視為“垃圾”并被清除。
垃圾搜集可能會(huì )在 session 啟動(dòng)的時(shí)候開(kāi)始(
取決于session.gc_probability 和
session.gc_divisor)。
注意:
如果不同的腳本具有不同的
session.gc_maxlifetime
數值但是共享了同一個(gè)地方存儲會(huì )話(huà)數據,則具有最小數值的腳本會(huì )清理數據。此情況下,與 session.save_path 一起使用本指令。
session.referer_check
string
session.referer_check
包含有用來(lái)檢查每個(gè) HTTP
Referer 的子串。如果客戶(hù)端發(fā)送了 Referer
信息但是在其中并未找到該子串,則嵌入的會(huì )話(huà) ID 會(huì )被標記為無(wú)效。默認為空字符串。
session.entropy_file
string
session.entropy_file
給出了一個(gè)到外部資源(文件)的路徑,該資源將在會(huì )話(huà)
ID 創(chuàng )建進(jìn)程中被用作附加的熵值資源。例如在許多 Unix 系統下都可以用
/dev/random
或 /dev/urandom
。
在 Windows 上也支持此功能。
設置 session.entropy_length
為非零的值將使 PHP 使用 Windows Random API 作為熵值源。
注意: PHP 7.1.0 中移除。 在
/dev/urandom
或/dev/arandom
可用的時(shí)候,session.entropy_file
默認使用它們。
session.entropy_length
int
session.entropy_length
指定了從上面的文件中讀取的字節數。默認為
0
(禁用)。
PHP 7.1.0 中移除。
session.use_strict_mode
bool
session.use_strict_mode
設置是否啟用嚴格 session id 模式。
開(kāi)啟此模式后,模塊不會(huì )接受未初始化過(guò)的 session ID。
從瀏覽器端傳入未初始化的 session ID 后,將會(huì )發(fā)送一個(gè)新的 session ID 給它。
通過(guò) session 啟用嚴格模式可固定 session 以保護應用。
默認為 0
(禁用)。
注意: 開(kāi)啟
session.use_strict_mode
是常規的 session 安全強制性措施。 建議所有站點(diǎn)都開(kāi)啟此模式。 可以參考 session_create_id() 例子中的代碼。
如果 session_set_save_handler() 注冊的自定義 session 處理器
沒(méi)有實(shí)現 SessionUpdateTimestampHandlerInterface::validateId(),
也沒(méi)有相應提供 validate_sid
回調,那么無(wú)論上述指令的值如何設置,
實(shí)際上嚴格 session ID 模式都是關(guān)閉狀態(tài)的。
尤其需要注意沒(méi)有
實(shí)現 SessionHandler::validateId()
的 SessionHandler。
session.use_cookies
指定是否在客戶(hù)端用
cookie 來(lái)存放會(huì )話(huà) ID。默認為 1
(啟用)。
session.use_only_cookies
指定是否在客戶(hù)端僅僅使用 cookie 來(lái)存放會(huì )話(huà) ID。。啟用此設定可以防止有關(guān)通過(guò)
URL 傳遞會(huì )話(huà) ID 的攻擊。默認值為1
(啟用)
session.cookie_lifetime
以秒數指定了發(fā)送到瀏覽器的
cookie 的生命周期。值為 0
表示“直到關(guān)閉瀏覽器”。默認為
0
。參見(jiàn)
session_get_cookie_params() 和
session_set_cookie_params()。
注意:
過(guò)期時(shí)間是根據服務(wù)器時(shí)間設置的, 它沒(méi)有必要和瀏覽器端的時(shí)間一致。
session.cookie_path
指定了要設定會(huì )話(huà) cookie 的路徑。默認為
/
。參見(jiàn)
session_get_cookie_params() 和
session_set_cookie_params()。
session.cookie_domain
指定了要設定會(huì )話(huà) cookie
的域名。默認為無(wú),表示根據 cookie 規范產(chǎn)生 cookie 的主機名。參見(jiàn)
session_get_cookie_params() 和
session_set_cookie_params()。
session.cookie_secure
指定是否僅通過(guò)安全連接發(fā)送
cookie。默認為 off
。此設定是 PHP 4.0.4 添加的。參見(jiàn)
session_get_cookie_params() 和
session_set_cookie_params()。
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ì )話(huà)頁(yè)面所使用的緩沖控制方法(
none
/nocache
/
private
/
private_no_expire
/public
)。默認為
nocache
。參見(jiàn)
session_cache_limiter() 文檔查看各個(gè)值的含義。
session.cache_expire
int
session.cache_expire
以分鐘數指定緩沖的會(huì )話(huà)頁(yè)面的存活期,此設定對
nocache 緩沖控制方法無(wú)效。默認為 180
。參見(jiàn)
session_cache_expire()。
session.use_trans_sid
bool
session.use_trans_sid
指定是否啟用透明 SID
支持。默認為 0
(禁用)。
注意: 基于 URL 的會(huì )話(huà)管理比基于 cookie 的會(huì )話(huà)管理有更多安全風(fēng)險。例如用戶(hù)有可能通過(guò) email 將一個(gè)包含有效的會(huì )話(huà) ID 的 URL 發(fā)給他的朋友,或者用戶(hù)總是有可能在收藏夾中存有一個(gè)包含會(huì )話(huà) ID 的 URL 來(lái)以同樣的會(huì )話(huà) ID 去訪(fǎng)問(wèn)站點(diǎn)。 自 PHP 7.1.0 開(kāi)始,透明 SID 開(kāi)始使用完整的 URL 絕對路徑,例如 https://php.net/。 在此之前 PHP 只會(huì )使用相對路徑。使用 session.trans_sid_hosts 定義重寫(xiě)的目標 host。
session.trans_sid_tags
指定是否需要重寫(xiě) HTML 標簽來(lái)包含 session id。
默認為
a=href,area=href,frame=src,input=src,form=
form
是個(gè)特殊標簽。
<input hidden="session_id" name="session_name">
作為表單變量添加。
注意: PHP 7.1.0 之前,url_rewriter.tags 用于此目的。 PHP 7.1.0 之后,
fieldset
不再作為特殊標簽對待。
session.trans_sid_hosts
string
session.trans_sid_hosts
設置了要重寫(xiě)包含 session 的主機名,
默認為 $_SERVER['HTTP_HOST']
。
多個(gè)主機用半角逗號 "," 分隔;主機名之間不能用空格。
例如 php.net,wiki.php.net,bugs.php.net
。
session.sid_length
int
session.sid_length
可以設置
session ID 字符串長(cháng)度。
Session ID 的長(cháng)度可以是在 22 到 256 之間。
默認是 32。
如果需要較好的兼容性可以設置為 32、40 等。
較長(cháng)的 session ID 會(huì )更難猜測。
推薦至少要 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
設置合適的值;否則將會(huì )有一個(gè)較弱的 session ID。
注意: PHP 7.1.0 中加入該設置。
session.sid_bits_per_character
int
session.sid_bits_per_character
設置要編碼 session ID 字符的比特數。
可能的設置有:
'4'(0-9、a-f)、'5'(0-9、a-v)、'6'(0-9、a-z、A-Z、"-"、",")。
默認為 4。
更多的比特數會(huì )產(chǎn)生更強健的 session ID。
對于絕大多數環(huán)境,推薦值是 5。
注意: PHP 7.1.0 中加入該設置。
session.hash_function
mixed
session.hash_function
允許用戶(hù)指定生成會(huì )話(huà)
ID 的散列算法。'0' 表示 MD5(128 位),'1' 表示 SHA-1(160 位)。
還可以指定 hash 擴展(開(kāi)啟的時(shí)候)
支持的任意算法,例如 sha512
或
whirlpool
。
可通過(guò) hash_algos() 函數獲取支持的算法完整名單。
注意:
PHP 7.1.0 中已經(jīng)移除。
session.hash_bits_per_character
int
session.hash_bits_per_character
允許用戶(hù)定義將二進(jì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
session.upload_progress.cleanup
boolean
注意: It is highly recommended to keep this feature enabled.
session.upload_progress.prefix
string
$_POST[ini_get("session.upload_progress.name")]
to
provide a unique index.
Defaults to "upload_progress_".
session.upload_progress.name
string
$_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
session.upload_progress.min_freq
int
session.lazy_write
bool
session.lazy_write
,設置成 1 的含義是:
只有 session 數據發(fā)生變化時(shí)才需要重新寫(xiě)入。默認為開(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.