Web 開發中,頁面間資料流轉是基礎中的基礎。本文系統整理四種核心傳遞機制:客戶端 Cookie、伺服端 Session、表單 POST、URL 參數 (GET),提供最小可行代碼、適用場景、安全性考量與最佳實踐對照表。
<?php
// page01.php - 寫入 Cookie
setcookie('mycookie', '自靈', [
'expires' => time() + 3600, // 1 小時有效
'path' => '/', // 全站可讀
'domain' => '', // 當前域名
'secure' => false, // HTTPS 才傳輸 (生產建議 true)
'httponly' => true, // JS 無法讀取,防 XSS
'samesite' => 'Lax', // CSRF 保護
]);
?><a href="page02.php">跳轉頁面 2</a>
<?php // page02.php - 讀取 Cookie $wuziling = $_COOKIE['mycookie'] ?? '未設定'; echo "接收到的 Cookie 值:$wuziling";
<?php // page01.php - 寫入 Session session_start(); // 必須在所有輸出前呼叫 $_SESSION['temp'] = ['123', '456', '789']; ?><a href="page02.php">跳轉頁面 2</a>
<?php
// page02.php - 讀取 Session
session_start();
foreach ($_SESSION['temp'] as $val) {
echo $val . '<br>';
}
PHPSESSID)、需處理分散式 Session 共享 (Redis/Memcached)、預設檔案鎖可能阻塞並發。<!-- page01.php --> <form action="page02.php" method="post"> <input type="text" name="wuziling" placeholder="輸入內容"> <button type="submit">提交</button> </form>
<?php // page02.php $wu = $_POST['wuziling'] ?? ''; echo "接收到 POST 值:$wu";
<?php // page01.php $var = 'I love you!'; ?> <a href="page02.php?new=<?= urlencode($var) ?>">跳轉帶參數</a>
<?php // page02.php echo "接收到 GET 參數:" . ($_GET['new'] ?? '無');
urlencode/rawurlencode)。| 維度 | Cookie | Session | POST | GET (URL) |
|---|---|---|---|---|
| 儲存位置 | 客戶端 | 伺服端 | 請求體 | URL |
| 容量 | ~4KB | 視伺服端設定 | 大 (post_max_size) | 小 (~2KB) |
| 持久性 | 可設定過期 | 瀏覽器關閉失效 (可延長) | 單次請求 | 永久 (書籤) |
| 安全性 | 低 (可竄改) | 高 (僅 ID 在客戶端) | 中 (需 CSRF 保護) | 低 (明文) |
| 適用場景 | 偏好設定、追蹤、記住我 | 登入狀態、購物車、權限 | 登入、註冊、付款、刪除 | 搜尋、分頁、分享連結 |
| SEO 影響 | 無 | 無 | 無 | 有 (可被索引) |
session_regenerate_id(true) 登入後)。💡 架構建議:現代框架 (Laravel, Symfony, Yii2, TP6) 已封裝
Request物件統一存取$request->input()、$request->session()、$request->cookie(),業務代碼應透過框架介面而非直接操作超全域變數,利於測試、遷移與安全審計。