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

PHP 防止瀏覽器後退的 Session 控制實作

     編輯:PHP 綜合知識

應用場景

多步驟表單、付款流程、引導式精靈等需強制單向導航的情境,防止使用者按「上一頁」造成資料重複提交或狀態錯亂。

核心原理

  • 使用 Session 標記使用者當前步驟
  • 同一腳本根據 Session 狀態輸出不同內容
  • 完成流程後清除標記,允許重新開始

實作範例:三步驟流程控制

步驟 1 & 2 共用腳本 (step12.php)

<?php
session_start();

// 進入步驟 2 的標記
if (isset($_GET['step2'])) {
    $_SESSION['step'] = 2;
}

// 根據 Session 狀態決定輸出
if (($_SESSION['step'] ?? 1) >= 2) {
    // 步驟 2:只能前進,無法回步驟 1
    echo '<h2>步驟 2:確認資料</h2>';
    echo '<a href="step3.php">前往步驟 3</a>';
} else {
    // 步驟 1:起始頁
    echo '<h2>步驟 1:填寫資料</h2>';
    echo '<a href="?step2=1">下一步</a>';
}
?>

步驟 3 (step3.php)

<?php
session_start();

// 完成流程,清除狀態允許重新開始
unset($_SESSION['step']);

echo '<h2>步驟 3:完成</h2>';
echo '<p>流程結束,<a href="step12.php">重新開始</a></p>';
?>

進階增強:防止重複提交 (PRG 模式)

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 驗證 CSRF Token
    if (!hash_equals($_SESSION['csrf'] ?? '', $_POST['csrf'] ?? '')) {
        die('無效請求');
    }
    
    // 處理業務邏輯...
    
    // Post-Redirect-Get:導向結果頁
    header('Location: result.php');
    exit;
}

// 產生新 Token
$_SESSION['csrf'] = bin2hex(random_bytes(32));
?>
<form method="post">
    <input type="hidden" name="csrf" value="<?= $_SESSION['csrf'] ?>">
    <!-- 表單欄位 -->
    <button type="submit">送出</button>
</form>

優缺點分析

優點缺點
伺服端控制,瀏覽器無關 需啟用 Cookie/Session
邏輯集中,易維護 多頁籤操作可能衝突
可結合 CSRF 保護 需注意 Session 過期處理

建議:現代 SPA 架構建議前端路由控制導航,後端以 API 狀態驗證為主,此法適用於傳統多頁應用(MPA)。

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