這些函數(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 起移除。 |
會(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)部格式 (名為 php
及
php_binary
) 和 WDDX (名為
wddx
)。
如果 PHP 編譯時(shí)加入了 WDDX
支持,則只能用 WDDX。
php_serialize
在內(nèi)部簡(jiǎn)單地直接使用
serialize/unserialize 函數(shù),并且不會(huì)有 php
和 php_binary
所具有的限制。
使用較舊的序列化處理器導(dǎo)致 $_SESSION 的索引既不能是數(shù)字也不能包含特殊字符(|
and !
) 。
使用 php_serialize
避免腳本退出時(shí),數(shù)字及特殊字符索引導(dǎo)致出錯(cuò)。
默認(rèn)使用
php
。
session.gc_probability
int
session.gc_probability
與
session.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_divisor
與
session.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_probability 和
session.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
指定是否在客戶端用
cookie 來(lái)存放會(huì)話 ID。默認(rèn)為 1
(啟用)。
session.use_only_cookies
指定是否在客戶端僅僅使用 cookie 來(lái)存放會(huì)話 ID。。啟用此設(shè)定可以防止有關(guān)通過(guò)
URL 傳遞會(huì)話 ID 的攻擊。默認(rèn)值為1
(啟用)
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
指定了要設(shè)定會(huì)話 cookie 的路徑。默認(rèn)為
/
。參見(jiàn)
session_get_cookie_params() 和
session_set_cookie_params()。
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
指定是否僅通過(guò)安全連接發(fā)送
cookie。默認(rèn)為 off
。此設(shè)定是 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ì)話頁(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 定義重寫的目標(biāo) host。
session.trans_sid_tags
指定是否需要重寫 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
session.trans_sid_hosts
設(shè)置了要重寫包含 session 的主機(jī)名,
默認(rèn)為 $_SERVER['HTTP_HOST']
。
多個(gè)主機(jī)用半角逗號(hào) "," 分隔;主機(jī)名之間不能用空格。
例如 php.net,wiki.php.net,bugs.php.net
。
session.sid_length
int
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í)候)
支持的任意算法,例如 sha512
或
whirlpool
。
可通過(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
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
,設(shè)置成 1 的含義是:
只有 session 數(shù)據(jù)發(fā)生變化時(shí)才需要重新寫入。默認(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.