session_start

(PHP 4, PHP 5, PHP 7, PHP 8)

session_start啟動(dòng)新會(huì)話或者重用現(xiàn)有會(huì)話

說(shuō)明

session_start(array $options = array()): bool

session_start() 會(huì)創(chuàng)建新會(huì)話或者重用現(xiàn)有會(huì)話。 如果通過(guò) GET 或者 POST 方式,或者使用 cookie 提交了會(huì)話 ID, 則會(huì)重用現(xiàn)有會(huì)話。

當(dāng)會(huì)話自動(dòng)開始或者通過(guò) session_start() 手動(dòng)開始的時(shí)候, PHP 內(nèi)部會(huì)調(diào)用會(huì)話管理器的 open 和 read 回調(diào)函數(shù)。 會(huì)話管理器可能是 PHP 默認(rèn)的, 也可能是擴(kuò)展提供的(SQLite 或者 Memcached 擴(kuò)展), 也可能是通過(guò) session_set_save_handler() 設(shè)定的用戶自定義會(huì)話管理器。 通過(guò) read 回調(diào)函數(shù)返回的現(xiàn)有會(huì)話數(shù)據(jù)(使用特殊的序列化格式存儲(chǔ)), PHP 會(huì)自動(dòng)反序列化數(shù)據(jù)并且填充 $_SESSION 超級(jí)全局變量。

要想使用命名會(huì)話,請(qǐng)?jiān)谡{(diào)用 session_start() 函數(shù) 之前調(diào)用 session_name() 函數(shù)。

如果啟用了 session.use_trans_sid 選項(xiàng), session_start() 函數(shù)會(huì)注冊(cè)一個(gè)內(nèi)部輸出管理器, 該輸出管理器完成 URL 重寫的工作。

如果用戶聯(lián)合使用 ob_start()ob_gzhandler 函數(shù), 那么函數(shù)的調(diào)用順序會(huì)影響輸出結(jié)果。 例如,必須在開始會(huì)話之前調(diào)用 ob_gzhandler 函數(shù)完成注冊(cè)。

參數(shù)

options

此參數(shù)是一個(gè)關(guān)聯(lián)數(shù)組,如果提供,那么會(huì)用其中的項(xiàng)目覆蓋 會(huì)話配置指示 中的配置項(xiàng)。此數(shù)組中的鍵無(wú)需包含 session. 前綴。

除了常規(guī)的會(huì)話配置指示項(xiàng), 還可以在此數(shù)組中包含 read_and_close 選項(xiàng)。如果將此選項(xiàng)的值設(shè)置為 true, 那么會(huì)話文件會(huì)在讀取完畢之后馬上關(guān)閉, 因此,可以在會(huì)話數(shù)據(jù)沒(méi)有變動(dòng)的時(shí)候,避免不必要的文件鎖。

返回值

成功開始會(huì)話返回 true ,反之返回 false

更新日志

版本 說(shuō)明
7.1.0 當(dāng) session_start() 執(zhí)行失敗, 無(wú)法開始一個(gè)會(huì)話的時(shí)候,會(huì)返回 false, 并且不會(huì)初始化超級(jí)變量 $_SESSION
7.0.0 新加 options 參數(shù)。
5.3.0 如果函數(shù)調(diào)用失敗返回 false, 之前版本返回了 true。

范例

基本的會(huì)話示例

示例 #1 page1.php

<?php
// page1.php

session_start();

echo 
'Welcome to page #1';

$_SESSION['favcolor'] = 'green';
$_SESSION['animal']   = 'cat';
$_SESSION['time']     = time();

// 如果使用 cookie 方式傳送會(huì)話 ID
echo '<br /><a href="page2.php">page 2</a>';

// 如果不是使用 cookie 方式傳送會(huì)話 ID,則使用 URL 改寫的方式傳送會(huì)話 ID
echo '<br /><a href="page2.php?' SID '">page 2</a>';
?>

請(qǐng)求 page1.php 頁(yè)面之后, 第二個(gè)頁(yè)面 page2.php 會(huì)包含會(huì)話數(shù)據(jù)。 請(qǐng)查閱 會(huì)話參考 獲取更多關(guān)于 會(huì)話 ID 傳送的信息, 在該參考頁(yè)面中有關(guān)于常量 SID 的詳細(xì)說(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']);

// 類似 page1.php 中的代碼,你可能需要在這里處理使用 SID 的場(chǎng)景
echo '<br /><a href="page1.php">page 1</a>';
?>

調(diào)用 session_start() 的時(shí)候指定選項(xiàng)

示例 #3 覆蓋 Cookie 超時(shí)時(shí)間設(shè)定

<?php
// 設(shè)置 cookie 的有效時(shí)間為 1 天
session_start([
    
'cookie_lifetime' => 86400,
]);
?>

示例 #4 讀取會(huì)話之后立即關(guān)閉會(huì)話存儲(chǔ)文件

<?php
// 如果確定不修改會(huì)話中的數(shù)據(jù),
// 我們可以在會(huì)話文件讀取完畢之后立即關(guān)閉它
// 來(lái)避免由于給會(huì)話文件加鎖導(dǎo)致其他頁(yè)面阻塞
session_start([
    
'cookie_lifetime' => 86400,
    
'read_and_close'  => true,
]);

注釋

注意:

要使用基于 cookie 的會(huì)話, 必須在輸出開始之前調(diào)用 session_start() 函數(shù)。

注意:

建議使用 zlib.output_compression 來(lái)替代 ob_gzhandler()。

注意:

根據(jù)配置不同,本函數(shù)會(huì)發(fā)送幾個(gè) HTTP 響應(yīng)頭。 參考 session_cache_limiter() 來(lái)自定義 HTTP 響應(yīng)頭。

參見