2024 年日本 PHP 研討會

基本用法

工作階段是一種簡單的方法,可以針對個別使用者儲存資料,並使用唯一的工作階段 ID。這可以用於在頁面請求之間維持狀態資訊。工作階段 ID 通常透過工作階段 Cookie 傳送到瀏覽器,而 ID 則用於擷取現有的工作階段資料。如果沒有 ID 或工作階段 Cookie,PHP 就會知道要建立新的工作階段,並產生新的工作階段 ID。

Session 的運作流程很簡單。當一個 session 開始時,PHP 會使用傳入的 ID(通常來自 session cookie)擷取現有的 session,或者如果沒有傳入 session ID,則會建立一個新的 session。在 session 開始後,PHP 會使用任何 session 資料填充 $_SESSION 超全域變數。當 PHP 關閉時,它會自動取得 $_SESSION 超全域變數的內容,將其序列化,並使用 session 儲存處理程式將其發送以進行儲存。

預設情況下,PHP 使用內建的 files 儲存處理程式,該處理程式由 session.save_handler 設定。這會將 session 資料儲存在伺服器上 session.save_path 設定指令指定的位置。

可以使用 session_start() 函式手動啟動 session。如果 session.auto_start 指令設定為 1,則 session 將在請求啟動時自動啟動。

Session 通常在 PHP 執行完腳本後自動關閉,但也可以使用 session_write_close() 函式手動關閉。

範例 #1 使用 $_SESSION 註冊變數。

<?php
session_start
();
if (!isset(
$_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>

範例 #2 使用 $_SESSION 取消註冊變數。

<?php
session_start
();
unset(
$_SESSION['count']);
?>

注意

不要使用 unset($_SESSION) 取消整個 $_SESSION,因為這會停用透過 $_SESSION 超全域變數註冊 session 變數的功能。

警告

您不能在 session 變數中使用參考,因為沒有可行的方法可以將參考恢復到另一個變數。

備註:

基於檔案的 session(PHP 中的預設值)會在透過 session_start() 或隱式地透過 session.auto_start 開啟 session 後鎖定 session 檔案。一旦鎖定,其他腳本就無法存取同一個 session 檔案,直到第一個腳本終止或呼叫 session_write_close() 關閉它為止。

這在大量使用 AJAX 並且有多個並行請求的網站上最可能成為一個問題。處理它的最簡單方法是在對 session 進行任何必要的更改後立即呼叫 session_write_close(),最好是在腳本的早期。或者,可以使用支援並行處理的不同 session 後端。

新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top