(PHP 4, PHP 5, PHP 7, PHP 8)
session_start — 啟動新會話或者重用現(xiàn)有會話
$options
= array()): boolsession_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() 設(shè)定的用戶自定義會話管理器。 通過 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ù)完成注冊。
options
此參數(shù)是一個關(guān)聯(lián)數(shù)組,如果提供,那么會用其中的項目覆蓋 會話配置指示 中的配置項。此數(shù)組中的鍵無需包含 session.
前綴。
除了常規(guī)的會話配置指示項,
還可以在此數(shù)組中包含 read_and_close
選項。如果將此選項的值設(shè)置為 true
,
那么會話文件會在讀取完畢之后馬上關(guān)閉,
因此,可以在會話數(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ù)。
請查閱 會話參考
獲取更多關(guān)于 會話 ID 傳送的信息,
在該參考頁面中有關(guān)于常量 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>';
?>
示例 #3 覆蓋 Cookie 超時時間設(shè)定
<?php
// 設(shè)置 cookie 的有效時間為 1 天
session_start([
'cookie_lifetime' => 86400,
]);
?>
示例 #4 讀取會話之后立即關(guān)閉會話存儲文件
<?php
// 如果確定不修改會話中的數(shù)據(jù),
// 我們可以在會話文件讀取完畢之后立即關(guān)閉它
// 來避免由于給會話文件加鎖導(dǎo)致其他頁面阻塞
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
注意:
要使用基于 cookie 的會話, 必須在輸出開始之前調(diào)用 session_start() 函數(shù)。
注意:
建議使用 zlib.output_compression 來替代 ob_gzhandler()。
注意:
根據(jù)配置不同,本函數(shù)會發(fā)送幾個 HTTP 響應(yīng)頭。 參考 session_cache_limiter() 來自定義 HTTP 響應(yīng)頭。