簡介

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

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

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

警告

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

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

警告

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

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

注意:

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

注意:

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