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

PHP 頁面間變數傳遞三大經典方案深度解析

     編輯:PHP 相關知識

從隱藏表單到 Session/Cookie:用戶狀態管理演進史

早期 PHP 開發中,跨頁面保持用戶登入狀態是核心挑戰。本文對比三種主流方案的實作細節、優缺點與適用場景,附完整可執行程式碼。

方案一:隱藏表單重傳 (原始但直觀)

<!-- test4.php 登入處理頁 -->
<?php
$username = "張小明"; // 假設驗證通過
?>
<form action="test5.php" method="POST">
    <input type="hidden" name="username" value="<?php echo htmlspecialchars($username); ?>">
    <input type="submit" value="進入會員區">
</form>

<!-- test5.php 目標頁 -->
<?php
echo "你好, " . htmlspecialchars($_POST['username']) . ",歡迎光臨!";
?>

缺點:每次跳轉需提交表單,刷新頁面會丟失資料,不適合多頁應用。

方案二:Session 伺服器端會話管理 (推薦)

<!-- test6.php 登入建立 Session -->
<?php
session_start();           // 必須在輸出前調用,前面不能有任何空白字元
session_register("username"); // PHP 4 風格,PHP 5+ 建議直接 $_SESSION['username'] = ...
$username = "張小明";
echo '<a href="test7.php">去看看</a>';
?>

<!-- test7.php 讀取 Session -->
<?php
session_start();
echo "你好, " . htmlspecialchars($_SESSION['username']) . ",歡迎光臨!";
?>

跨視窗傳遞 Session ID:

<!-- test8.php -->
<?php
session_start();
session_register("username");
$username = "張小明";
$sid = session_id();
echo '<a href="test7.php?' . SID . '" target="_blank">新視窗查看</a>';
// SID 常數自動展開為 "PHPSESSID=xxx" (僅當 Cookie 被禁用時)
?>

方案三:Cookie 客戶端持久化儲存

<!-- test9.php 設定 Cookie -->
<?php
// 有效期 1 小時,路徑為全站
setcookie("username", "張小明", time()+3600, "/");
echo '<a href="test5.php">去看看</a>';
?>

<!-- test5.php 讀取 Cookie -->
<?php
if (isset($_COOKIE['username'])) {
    echo "你好, " . htmlspecialchars($_COOKIE['username']) . ",歡迎光臨!";
} else {
    echo "未檢測到登入 Cookie";
}
?>

三大方案對比總結

維度隱藏表單SessionCookie
儲存位置客戶端 (HTML)伺服器端 (檔案/資料庫)客戶端 (瀏覽器)
安全性低 (可被篡改)高 (敏感資料不出伺服器)中 (需加密敏感欄位)
持久性單次請求瀏覽器關閉失效 (可配置)可設定過期時間
跨域支援困難需共享儲存介質原生支援 (同域)
適用場景簡單單次跳轉用戶登入、購物車、多步驟流程記住我、偏好設定、追蹤分析

現代最佳實踐建議

  • 登入狀態:Session + 安全 Cookie (HttpOnly, Secure, SameSite)
  • 長期記住:加密 Cookie + 資料庫 Token 驗證
  • 分散式系統:Redis/Memcached 集中式 Session 儲存
  • API 無狀態:JWT (JSON Web Token) 替代傳統 Session
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved