PHP - $_SESSION: 了解並使用 PHP 中的會話

什麼是會話?

你是否曾經好奇過,網站是如何記住你的登錄信息,或者在你在不同頁面間導航時保持你的購物車內容?答案就在會話(Sessions)!

PHP - $_SESSION

在 PHP 中,會話是一種在多個頁面間存儲用戶信息的方式。這就像當訪客進入你的網站時,給每個訪客一個獨特的身份識別證,讓你可以追踪他們的活動和偏好。

想像你正在主持一個派對。當客人到達時,你會給每個人一個帶有唯一數字的特別手環。在派對過程中,你可以使用這些數字來記住誰點了什麼飲料,或者誰對花生過敏。這在數字世界中基本上就是會話的作用!

會話的關鍵特點:

  1. 暫時存儲
  2. 用戶特定
  3. 服務器端存儲(比 cookies 更安全)
  4. 在設定的時間後或瀏覽器關閉後過期

session_start() 函數

在我們可以使用會話之前,我們需要啟動它們。這就是 session_start() 函數的用武之地。這就像打開派對的燈光——它表示我們準備好開始追踪我們的訪客了。

<?php
session_start();
?>

這行簡單的代碼應該放在你的 PHP 腳本的最開始,在任何 HTML 輸出之前。這就像我們派對的門衛——它需要從一開始就在那裡!

重點注意:

  • 在使用任何會話變量之前,總是調用 session_start()
  • 如果你看到了 "Headers already sent" 錯誤,請確保在 session_start() 之前沒有輸出。

處理會話變量

一旦我們啟動了會話,我們就可以創建和使用會話變量。這些變量存儲在 $_SESSION 超全局數組中。

設置會話變量

<?php
session_start();
$_SESSION['username'] = 'JohnDoe';
$_SESSION['user_id'] = 123;
$_SESSION['is_admin'] = true;
?>

在這個例子中,我們存儲了一個用戶名、用戶 ID 和管理員狀態。這就像在我們的派對上記錄每個客人的信息。

檢索會話變量

<?php
session_start();
echo "歡迎回來," . $_SESSION['username'] . "!";
if ($_SESSION['is_admin']) {
echo "你擁有管理員權限。";
}
?>

在這裡,我們使用存儲的信息來個人化用戶體驗。這就像認出一個回頭客並記住他們的偏好。

修改會話變量

<?php
session_start();
$_SESSION['visit_count'] = ($_SESSION['visit_count'] ?? 0) + 1;
echo "你已經訪問這個頁面 " . $_SESSION['visit_count'] . " 次。";
?>

這段代碼在每次加載頁面時增加訪問計數器。這就像在我們的派對上跟踪每個客人喝了多少飲料。

移除會話變量

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

有時,我們需要忘記某些信息。unset() 讓我們可以移除特定的會話變量,就像在飲料被服用後擦除客人的飲料訂單。

销毁整個會話

<?php
session_start();
session_destroy();
?>

當派對結束時,我們需要清理。session_destroy() 移除所有會話數據,從而將所有客人送回家並清理場所。

會話函數列表

以下是最常見的 PHP 會話函數的便捷表格:

函數 描述
session_start() 開始一個新的會話或恢復一個已存在的會話
session_destroy() 销毁所有註冊到會話的數據
session_unset() 釋放所有會話變量
session_id() 獲取或設定會話 ID
session_name() 獲取或設定會話名稱
session_regenerate_id() 更新當前會話 ID 為一個新的
session_status() 返回當前會話狀態

高級會話使用範例

讓我們看一些更複雜的例子來真正鞏固我們的理解:

實現一個簡單的登錄系統

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];

// 在實際應用程序中,你會將這些與數據庫進行比較
if ($username == 'admin' && $password == 'password123') {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $username;
echo "登錄成功!";
} else {
echo "無效的用戶名或密碼。";
}
}

if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
echo "歡迎," . $_SESSION['username'] . "!你已經登錄。";
} else {
echo "請登錄。";
}
?>

這個例子展示了基本的登錄系統。這就像在我們的派對上有一個 VIP 名單,並在讓客人進入專屬區域前檢查他們是否在名單上。

創建一個購物車

<?php
session_start();

// 將項目添加到購物車
if (isset($_POST['add_to_cart'])) {
$product_id = $_POST['product_id'];
$_SESSION['cart'][$product_id] = ($_SESSION['cart'][$product_id] ?? 0) + 1;
}

// 顯示購物車內容
echo "你的購物車包含:<br>";
if (isset($_SESSION['cart'])) {
foreach ($_SESSION['cart'] as $product_id => $quantity) {
echo "產品 ID: $product_id, 數量: $quantity<br>";
}
} else {
echo "你的購物車是空的。";
}
?>

這段代碼展示了如何使用會話實現一個簡單的購物車。這就像在我們的派對自助餐上跟踪每個客人訂了什麼。

總結來說,PHP 中的會話提供了一種強大的方式來在多個頁面請求之間保持狀態和用戶特定的信息。通過了解和有效地使用會話,你可以創建有更多動態和個人化的網絡應用程序。記住,能力越大,責任越大——始終安全地處理會話數據,並在存儲大量數據在會話中時注意性能影響。

開心地編程,願你的會話永遠順利!

Credits: Image by storyset