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

PHP 頁面傳值三大方式詳解:POST、GET 與 Session 實戰代碼

     編輯:Java 相關知識

核心對比表

方式數據可見性長度限制適用場景安全性
POST不可見(請求體)無實質限制(受 post_max_size)表單提交、修改/刪除操作、敏感數據較高
GET可見(URL 參數)~2KB(瀏覽器/服務器限制)查詢、分頁、分享鏈接、幂等操作低(參數暴露在歷史/日誌)
Session服務端存儲,客戶端僅 Cookie ID受 session 存儲引擎限制用戶登錄態、購物車、多步驟向導數據高(需防 Session 劫持)

1. POST 表單提交

<!-- form.html -->
<form action="handle.php" method="post">
    <input type="text" name="username" placeholder="用戶名" required>
    <input type="password" name="pwd" placeholder="密碼" required>
    <input type="hidden" name="csrf_token" value="<?= generate_csrf_token() ?>">
    <button type="submit">提交</button>
</form>
<?php
// handle.php
session_start();
// 1. CSRF 驗證
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'] ?? '')) {
    die('非法請求');
}
// 2. 獲取並過濾
$username = trim(filter_input(INPUT_POST, 'username', FILTER_SANITIZE_SPECIAL_CHARS));
$pwd = $_POST['pwd']; // 密碼不建議過濾,直接驗證哈希
// 3. 業務邏輯...
echo "接收到:$username";
?>

隱藏域技巧:<input type="hidden" name="redirect_url" value="/dashboard"> 可在不暴露給用戶的情況下傳遞跳轉目標。

2. GET 參數傳遞

<!-- 列表頁 -->
<a href="delete.php?id=1001&token=<?= urlencode($_SESSION['csrf_token']) ?>">刪除</a>
<a href="detail.php?id=1001">詳情</a>
<?php
// delete.php
if (!isset($_GET['id'], $_GET['token'])) die('參數缺失');
$id = (int)$_GET['id']; // 強制轉型防注入
// 驗證 token...
// 執行刪除...
header('Location: list.php');
?>

注意:GET 請求不應修改服務端狀態(刪除/修改),否則違反 HTTP 語義且易遭 CSRF。實際項目中刪除操作應用 POST/DELETE + CSRF Token。

3. Session 跨頁面共享

<?php
// login.php - 登錄成功後
session_start();
// 驗證賬號密碼...
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['roles'] = $user['roles'];
// 設置 Session 過期時間(如 30 分鐘無操作)
ini_set('session.gc_maxlifetime', 1800);
session_set_cookie_params(1800);
header('Location: dashboard.php');
?>
<?php
// dashboard.php - 受保護頁面
session_start();
if (empty($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}
$userId = $_SESSION['user_id'];
$username = $_SESSION['username'];
// 業務邏輯...
?>
<?php
// logout.php
session_start();
$_SESSION = []; // 清空數據
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
header('Location: login.php');
?>

安全最佳實踐清單

  • CSRF 防護:所有 POST/DELETE 請求強制驗證 Token(隱藏域或 Header)。
  • XSS 防護:輸出到 HTML 時用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  • SQL 注入:永遠使用預處理語句(PDO::prepare),拒絕拼接 SQL。
  • Session 安全:session.cookie_httponly=1、session.cookie_secure=1(HTTPS)、定期 session_regenerate_id(true)。
  • 敏感數據:密碼只存 password_hash(),不在 Session/GET/POST 明文傳輸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved