session_start

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

session_start啟動新會話或者重用現(xiàn)有會話

說明

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

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

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

要想使用命名會話,請在調(diào)用 session_start() 函數(shù) 之前調(diào)用 session_name() 函數(shù)。

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

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

參數(shù)

options

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

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

返回值

成功開始會話返回 true ,反之返回 false

更新日志

版本 說明
7.1.0 session_start() 執(zhí)行失敗, 無法開始一個會話的時候,會返回 false, 并且不會初始化超級變量 $_SESSION。
7.0.0 新加 options 參數(shù)。
5.3.0 如果函數(shù)調(diào)用失敗返回 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 方式傳送會話 ID
echo '<br /><a href="page2.php">page 2</a>';

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

請求 page1.php 頁面之后, 第二個頁面 page2.php 會包含會話數(shù)據(jù)。 請查閱 會話參考 獲取更多關于 會話 ID 傳送的信息, 在該參考頁面中有關于常量 SID 的詳細說明。

示例 #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 的場景
echo '<br /><a href="page1.php">page 1</a>';
?>

調(diào)用 session_start() 的時候指定選項

示例 #3 覆蓋 Cookie 超時時間設定

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

示例 #4 讀取會話之后立即關閉會話存儲文件

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

注釋

注意:

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

注意:

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

注意:

根據(jù)配置不同,本函數(shù)會發(fā)送幾個 HTTP 響應頭。 參考 session_cache_limiter() 來自定義 HTTP 響應頭。

參見