簡(jiǎn)介

會(huì)話支持在 PHP 中是在并發(fā)訪問(wèn)時(shí)由一個(gè)方法來(lái)保存某些數(shù)據(jù).從而使你能夠構(gòu)建更多的定制程序 從而提高你的 web 網(wǎng)站的吸引力.

一個(gè)訪問(wèn)者訪問(wèn)你的 web 網(wǎng)站將被分配一個(gè)唯一的 id, 就是所謂的會(huì)話 id. 這個(gè) id 可以存儲(chǔ)在用戶端的一個(gè) cookie 中,也可以通過(guò) URL 進(jìn)行傳遞.

會(huì)話支持允許你將請(qǐng)求中的數(shù)據(jù)保存在超全局?jǐn)?shù)組$_SESSION中. 當(dāng)一個(gè)訪問(wèn)者訪問(wèn)你的網(wǎng)站,PHP 將自動(dòng)檢查(如果 session.auto_start 被設(shè)置為 1)或者在你要求下檢查(明確通過(guò) session_start() 或者隱式通過(guò) session_register()) 當(dāng)前會(huì)話 id 是否是先前發(fā)送的請(qǐng)求創(chuàng)建. 如果是這種情況, 那么先前保存的環(huán)境將被重建.

警告

如果你打開(kāi)了 session.auto_start 那么 將對(duì)象放入會(huì)話的唯一方法是使用 auto_prepend_file 來(lái)加載定義這個(gè)對(duì)象的類,其中,在加載的定義的類時(shí),你不得不使用 serialize() 你得對(duì)象,并且事后 unserialize() 它.

$_SESSION (和所有已注冊(cè)得變量) 將被 PHP 使用內(nèi)置的序列化方法在請(qǐng)求完成時(shí) 進(jìn)行序列化.序列化方法可以通過(guò) session.serialize_handler 這個(gè) PHP 配置選項(xiàng)中來(lái)設(shè)置一個(gè)指定的方法.注冊(cè)的變量未定義將被標(biāo)記為未定義.在并發(fā)訪問(wèn)時(shí),這些變量不會(huì)被會(huì)話模塊 定義除非用戶后來(lái)定義了它們.

警告

因?yàn)闀?huì)話數(shù)據(jù)是被序列化的,resource 變量不能被存儲(chǔ)在會(huì)話中.

序列化句柄 (phpphp_binary) 會(huì)受到 register_globals 的限制. 而且,數(shù)字索引或者字符串索引包含的特殊字符(|!) 不能被使用. 使用這些字符將腳本執(zhí)行關(guān)閉時(shí)的最后出現(xiàn)錯(cuò)誤. php_serialize 沒(méi)有這樣的限制.php_serialize 從 PHP 5.5.4 以后可用.

注意:

請(qǐng)注意當(dāng)會(huì)話工作時(shí),會(huì)話的記錄并沒(méi)有被創(chuàng)建 直到一個(gè)變量已經(jīng)被使用 session_register() 注冊(cè)或者被添加一個(gè)新元素到 $_SESSION 全局?jǐn)?shù)組中. 這點(diǎn)一直有效,無(wú)論是否使用 session_start() 函數(shù) 來(lái)開(kāi)始會(huì)話.

注意:

在 PHP 5.2.2 有一個(gè)沒(méi)有在文檔中說(shuō)明的特性是用文件存儲(chǔ)時(shí),即使是 在 open_basedir 被啟用,并且 "/tmp" 沒(méi)有被添加到 允許路徑列表中,也能將會(huì)話存儲(chǔ)到 "/tmp" 目錄. 這個(gè)特性在 PHP 5.3.0 時(shí)已經(jīng)從 PHP 中被移除了.