文章

PHP - 超級全域變數 (`$_GET`, `$_POST`, `$_SESSION`)


課程簡介

超級全域變數是 PHP 提供的一組內建陣列,用於在伺服器端處理來自用戶的數據或伺服器相關的資訊。本課程將聚焦於 $_GET$_POST$_SESSION,探討其功能與使用場景。


超級全域變數簡介

1. $_GET

  • 用於獲取通過 URL 傳遞的參數。
  • 資料會附加在 URL 後,適合用於讀取數據(例如查詢)。

範例:
URL: http://example.com/index.php?name=Alice&age=25

1
2
3
4
5
6
<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo "姓名:$name<br>";
echo "年齡:$age";
?>

2. $_POST

  • 用於獲取通過表單提交的數據,尤其是隱私數據或大數據量。
  • 數據不會顯示在 URL 上,適合用於數據提交(例如註冊、登入)。

範例:
HTML 表單

1
2
3
4
5
6
7
<form action="process.php" method="post">
    <label for="name">姓名:</label>
    <input type="text" id="name" name="name">
    <label for="age">年齡:</label>
    <input type="number" id="age" name="age">
    <button type="submit">提交</button>
</form>

PHP 處理

1
2
3
4
5
6
<?php
$name = $_POST["name"];
$age = $_POST["age"];
echo "姓名:$name<br>";
echo "年齡:$age";
?>

3. $_SESSION

  • 用於在伺服器端儲存用戶的會話數據,數據在多個頁面之間共享。
  • 需要啟用會話處理,並且會話數據保存在伺服器端而非用戶端。

開始會話

使用 session_start() 開啟或恢復會話。
範例:

1
2
3
4
5
<?php
session_start();
$_SESSION["username"] = "Alice";
echo "用戶名已儲存於會話中。";
?>

獲取會話數據

在其他頁面中可以讀取儲存的會話數據。

1
2
3
4
<?php
session_start();
echo "用戶名為:" . $_SESSION["username"];
?>

刪除會話數據

  • 刪除某個變數:unset($_SESSION["username"]);
  • 刪除所有會話數據:
    1
    2
    
    session_unset();
    session_destroy();
    

三者比較

特性$_GET$_POST$_SESSION
傳遞方式URL(可見)HTTP 請求主體(隱藏)儲存在伺服器端
數據大小限制通常限制為 2000 字符左右(瀏覽器)理論上無限制(伺服器設定影響)取決於伺服器存儲空間
使用場景查詢參數、分享 URL提交數據(登入、註冊等)儲存用戶會話數據
安全性易被修改,不適合處理敏感數據較安全,但需防範 CSRF 攻擊較安全,但需妥善管理會話

教學練習

練習 1:使用 $_GET 傳遞數據

設計一個網頁,透過 URL 傳遞兩個數字,並計算它們的總和。


練習 2:使用 $_POST 接收表單數據

建立一個登入表單,包含「用戶名」與「密碼」欄位,提交後顯示歡迎訊息。


練習 3:使用 $_SESSION 儲存會話數據

建立一個頁面,儲存用戶名到 $_SESSION,並在另一個頁面顯示該用戶名。


教學重點

  • 理解 $_GET$_POST$_SESSION 的特性與使用場景。
  • 熟悉資料的傳遞與獲取,並掌握伺服器端的數據管理。
  • 強調安全性,避免資料洩露或不當使用。

是否需要進一步講解其他超級全域變數(如 $_FILES$_COOKIE)?

本文章以 CC BY 4.0 授權