(PHP 4, PHP 5, PHP 7, PHP 8)
session_start — 啟動(dòng)新會(huì )話(huà)或者重用現有會(huì )話(huà)
$options
= array()): boolsession_start() 會(huì )創(chuàng )建新會(huì )話(huà)或者重用現有會(huì )話(huà)。 如果通過(guò) GET 或者 POST 方式,或者使用 cookie 提交了會(huì )話(huà) ID, 則會(huì )重用現有會(huì )話(huà)。
當會(huì )話(huà)自動(dòng)開(kāi)始或者通過(guò) session_start() 手動(dòng)開(kāi)始的時(shí)候, PHP 內部會(huì )調用會(huì )話(huà)管理器的 open 和 read 回調函數。 會(huì )話(huà)管理器可能是 PHP 默認的, 也可能是擴展提供的(SQLite 或者 Memcached 擴展), 也可能是通過(guò) session_set_save_handler() 設定的用戶(hù)自定義會(huì )話(huà)管理器。 通過(guò) read 回調函數返回的現有會(huì )話(huà)數據(使用特殊的序列化格式存儲), PHP 會(huì )自動(dòng)反序列化數據并且填充 $_SESSION 超級全局變量。
要想使用命名會(huì )話(huà),請在調用 session_start() 函數 之前調用 session_name() 函數。
如果啟用了 session.use_trans_sid 選項, session_start() 函數會(huì )注冊一個(gè)內部輸出管理器, 該輸出管理器完成 URL 重寫(xiě)的工作。
如果用戶(hù)聯(lián)合使用 ob_start()
和 ob_gzhandler
函數,
那么函數的調用順序會(huì )影響輸出結果。
例如,必須在開(kāi)始會(huì )話(huà)之前調用 ob_gzhandler
函數完成注冊。
options
此參數是一個(gè)關(guān)聯(lián)數組,如果提供,那么會(huì )用其中的項目覆蓋 會(huì )話(huà)配置指示 中的配置項。此數組中的鍵無(wú)需包含 session.
前綴。
除了常規的會(huì )話(huà)配置指示項,
還可以在此數組中包含 read_and_close
選項。如果將此選項的值設置為 true
,
那么會(huì )話(huà)文件會(huì )在讀取完畢之后馬上關(guān)閉,
因此,可以在會(huì )話(huà)數據沒(méi)有變動(dòng)的時(shí)候,避免不必要的文件鎖。
成功開(kāi)始會(huì )話(huà)返回 true
,反之返回 false
版本 | 說(shuō)明 |
---|---|
7.1.0 |
當 session_start() 執行失敗,
無(wú)法開(kāi)始一個(gè)會(huì )話(huà)的時(shí)候,會(huì )返回 false ,
并且不會(huì )初始化超級變量 $_SESSION。
|
7.0.0 |
新加 options 參數。
|
5.3.0 |
如果函數調用失敗返回 false ,
之前版本返回了 true 。
|
示例 #1 page1.php
<?php
// page1.php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// 如果使用 cookie 方式傳送會(huì )話(huà) ID
echo '<br /><a href="page2.php">page 2</a>';
// 如果不是使用 cookie 方式傳送會(huì )話(huà) ID,則使用 URL 改寫(xiě)的方式傳送會(huì )話(huà) ID
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
請求 page1.php 頁(yè)面之后,
第二個(gè)頁(yè)面 page2.php
會(huì )包含會(huì )話(huà)數據。
請查閱 會(huì )話(huà)參考
獲取更多關(guān)于 會(huì )話(huà) ID 傳送的信息,
在該參考頁(yè)面中有關(guān)于常量 SID
的詳細說(shuō)明。
示例 #2 page2.php
<?php
// page2.php
session_start();
echo 'Welcome to page #2<br />';
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);
// 類(lèi)似 page1.php 中的代碼,你可能需要在這里處理使用 SID 的場(chǎng)景
echo '<br /><a href="page1.php">page 1</a>';
?>
示例 #3 覆蓋 Cookie 超時(shí)時(shí)間設定
<?php
// 設置 cookie 的有效時(shí)間為 1 天
session_start([
'cookie_lifetime' => 86400,
]);
?>
示例 #4 讀取會(huì )話(huà)之后立即關(guān)閉會(huì )話(huà)存儲文件
<?php
// 如果確定不修改會(huì )話(huà)中的數據,
// 我們可以在會(huì )話(huà)文件讀取完畢之后立即關(guān)閉它
// 來(lái)避免由于給會(huì )話(huà)文件加鎖導致其他頁(yè)面阻塞
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
注意:
要使用基于 cookie 的會(huì )話(huà), 必須在輸出開(kāi)始之前調用 session_start() 函數。
注意:
建議使用 zlib.output_compression 來(lái)替代 ob_gzhandler()。
注意:
根據配置不同,本函數會(huì )發(fā)送幾個(gè) HTTP 響應頭。 參考 session_cache_limiter() 來(lái)自定義 HTTP 響應頭。