首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 頁面間參數傳遞四大經典方法完整解析:Cookie、Session、表單 POST、URL 參數

     編輯:PHP 相關知識

PHP 頁面間參數傳遞四大經典方法完整解析:Cookie、Session、表單 POST、URL 參數

Web 開發中,頁面間資料流轉是基礎中的基礎。本文系統整理四種核心傳遞機制:客戶端 Cookie、伺服端 Session、表單 POST、URL 參數 (GET),提供最小可行代碼、適用場景、安全性考量與最佳實踐對照表。

方法一:Cookie — 客戶端持久化

<?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";
  • 優點:跨瀏覽器分頁/視窗共享、可設定過期時間持久化。
  • 缺點:大小限制 4KB、用戶可禁用/清除、隨每請求自動送出增加頻寬、不可存敏感資料。

方法二:Session — 伺服端狀態管理

<?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>';
}
  • 優點:資料存伺服器 (預設檔案/Redis/DB),容量大、用戶不可直接竄改、安全性高。
  • 缺點:依賴 Cookie 傳遞 Session ID (預設 PHPSESSID)、需處理分散式 Session 共享 (Redis/Memcached)、預設檔案鎖可能阻塞並發。

方法三:表單 POST — 明確的資料提交

<!-- 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";
  • 優點:語意明確、支援大量/二進位資料 (multipart/form-data)、URL 不顯示參數、可配合 CSRF Token 防偽造。
  • 缺點:需用戶主動操作、重新整理會重複提交 (PRG 模式解決)、不利書籤/分享。

方法四:URL 參數 (GET) — 可分享、可書籤

<?php
// page01.php
$var = 'I love you!';
?>
<a href="page02.php?new=<?= urlencode($var) ?>">跳轉帶參數</a>
<?php
// page02.php
echo "接收到 GET 參數:" . ($_GET['new'] ?? '無');
  • 優點:可複製分享連結、書籤保存狀態、有利 SEO (靜態化 URL)、快取友善。
  • 缺點:長度限制 (瀏覽器/伺服器約 2KB-8KB)、參數明文顯示於地址列、不可用於敏感/修改性操作、編碼麻煩 (需 urlencode/rawurlencode)。

四大方法對照表

維度CookieSessionPOSTGET (URL)
儲存位置客戶端伺服端請求體URL
容量~4KB視伺服端設定大 (post_max_size)小 (~2KB)
持久性可設定過期瀏覽器關閉失效 (可延長)單次請求永久 (書籤)
安全性低 (可竄改)高 (僅 ID 在客戶端)中 (需 CSRF 保護)低 (明文)
適用場景偏好設定、追蹤、記住我登入狀態、購物車、權限登入、註冊、付款、刪除搜尋、分頁、分享連結
SEO 影響無無無有 (可被索引)

安全性黃金法則

  1. 敏感資料 (密碼、Token、個資) 僅走 Session/POST + HTTPS,絕不放 Cookie/URL。
  2. 所有修改性操作 (增/刪/改) 必須 POST + CSRF Token。
  3. Cookie 設定 HttpOnly + Secure + SameSite。
  4. Session ID 定期輪換 (session_regenerate_id(true) 登入後)。
  5. URL 參數嚴格驗證、過濾、轉義,防 XSS/SQLi。

💡 架構建議:現代框架 (Laravel, Symfony, Yii2, TP6) 已封裝 Request 物件統一存取 $request->input()、$request->session()、$request->cookie(),業務代碼應透過框架介面而非直接操作超全域變數,利於測試、遷移與安全審計。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved