會話支持在 PHP 中是在并發(fā)訪問時由一個方法來保存某些數(shù)據(jù).從而使你能夠構(gòu)建更多的定制程序 從而提高你的 web 網(wǎng)站的吸引力.
一個訪問者訪問你的 web 網(wǎng)站將被分配一個唯一的 id, 就是所謂的會話 id. 這個 id 可以存儲在用戶端的一個 cookie 中,也可以通過 URL 進行傳遞.
會話支持允許你將請求中的數(shù)據(jù)保存在超全局數(shù)組$_SESSION中. 當一個訪問者訪問你的網(wǎng)站,PHP 將自動檢查(如果 session.auto_start 被設(shè)置為 1)或者在你要求下檢查(明確通過 session_start() 或者隱式通過 session_register()) 當前會話 id 是否是先前發(fā)送的請求創(chuàng)建. 如果是這種情況, 那么先前保存的環(huán)境將被重建.
如果你打開了 session.auto_start 那么 將對象放入會話的唯一方法是使用 auto_prepend_file 來加載定義這個對象的類,其中,在加載的定義的類時,你不得不使用 serialize() 你得對象,并且事后 unserialize() 它.
$_SESSION (和所有已注冊得變量) 將被 PHP 使用內(nèi)置的序列化方法在請求完成時 進行序列化.序列化方法可以通過 session.serialize_handler 這個 PHP 配置選項中來設(shè)置一個指定的方法.注冊的變量未定義將被標記為未定義.在并發(fā)訪問時,這些變量不會被會話模塊 定義除非用戶后來定義了它們.
因為會話數(shù)據(jù)是被序列化的,resource 變量不能被存儲在會話中.
序列化句柄 (php
和 php_binary
) 會受到 register_globals 的限制.
而且,數(shù)字索引或者字符串索引包含的特殊字符(|
和 !
) 不能被使用. 使用這些字符將腳本執(zhí)行關(guān)閉時的最后出現(xiàn)錯誤.
php_serialize
沒有這樣的限制.php_serialize
從
PHP 5.5.4 以后可用.
注意:
請注意當會話工作時,會話的記錄并沒有被創(chuàng)建 直到一個變量已經(jīng)被使用 session_register() 注冊或者被添加一個新元素到 $_SESSION 全局數(shù)組中. 這點一直有效,無論是否使用 session_start() 函數(shù) 來開始會話.
注意:
在 PHP 5.2.2 有一個沒有在文檔中說明的特性是用文件存儲時,即使是 在 open_basedir 被啟用,并且 "/tmp" 沒有被添加到 允許路徑列表中,也能將會話存儲到 "/tmp" 目錄. 這個特性在 PHP 5.3.0 時已經(jīng)從 PHP 中被移除了.