2024 年 PHP Conference Japan

session_id

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

session_id取得和/或設定目前工作階段 ID

說明

session_id(?字串 $id = null): 字串|false

session_id() 用於取得或設定目前工作階段的階段識別碼 (session id)。

常數 SID 也可用於擷取目前的階段名稱和階段識別碼,其格式為適用於附加到網址的字串。另請參閱 階段處理 (Session handling)

參數

id

如果指定了 id 且其值不為 null,它將取代目前的階段識別碼。基於此目的,session_id() 必須在呼叫 session_start() 之前呼叫。根據階段處理程式,並非所有字元都允許在階段識別碼中使用。例如,檔案階段處理程式只允許 [a-zA-Z0-9,-] 範圍內的字元!

注意當使用階段 Cookie 時,為 session_id() 指定 id 將總是在呼叫 session_start() 時傳送新的 Cookie,無論目前的階段識別碼是否與設定的識別碼相同。

回傳值

session_id() 會傳回目前階段的階段識別碼,如果沒有目前的階段(不存在目前的階段識別碼),則傳回空字串 ("")。如果失敗,則傳回 false

更新日誌

版本 說明
8.0.0 id 現在可以為 null。

另請參閱

新增註解

使用者貢獻的註解 1 則註解

42
Riikka K
9 年前
可能需要注意的是,PHP 不允許任意階段識別碼。 PHP 原始碼中的階段識別碼驗證定義在 ext/session/session.c 中的 php_session_valid_key 函式中。

https://github.com/php/php-src/blob/master/ext/session/session.c

簡而言之,有效的階段識別碼可以由數字、字母 A 到 Z(大寫和小寫)、逗號和破折號組成。以字元類別描述,它將是 [-,a-zA-Z0-9]。有效的階段識別碼長度可以在 1 到 128 個字元之間。要驗證階段識別碼,最簡單的方法是使用如下函式:

<?php

function session_valid_id($session_id)
{
return
preg_match('/^[-,a-zA-Z0-9]{1,128}$/', $session_id) > 0;
}

?>

`session_id()` 函式本身會接受無效的 session id,但如果您嘗試使用無效的 id 啟動一個 session,您會收到以下錯誤訊息:

警告:session_start():Session id 過長或包含非法字元,有效字元為 a-z、A-Z、0-9 和 '-,'
To Top