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

PHP 登入後自動跳轉回原訪問頁面的兩種實現方案

     編輯:PHP 相關知識

當使用者嘗試存取需權限的頁面時,系統會導向登入頁(login.php)。登入成功後,如何將使用者送回原本想看的頁面?本文介紹兩種主流做法:Cookie 儲存法與 GET 參數傳遞法。

方案一:Cookie 儲存原始 URL(適合框架統一處理)

在基類控制器的初始化方法(如 ThinkPHP 的 _initialize())中攔截未授權請求,將當前完整 URL 寫入 Cookie:

$refer = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
Cookie::set('refer', $refer);

登入驗證通過後,讀取 Cookie 並跳轉:

$refer = Cookie::get('refer');
// 可透過 AJAX 回傳 $refer 讓前端跳轉,或直接 header 跳轉
header("Location: $refer");
exit;
優點:URL 不暴露於地址列,適合 POST 表單登入;缺點:依賴 Cookie,若使用者禁用 Cookie 則失效。

方案二:GET 參數傳遞回跳 URL(簡單、通用)

跳轉登入頁時攜帶 url 參數:

// 原頁面 openphp.html
// 跳轉至
login.php?url=openphp.html

登入頁接收並保存(可存入 Session 或隱藏表單欄位),驗證成功後跳轉:

$target = $_GET['url'] ?? '/'; // 預設首頁
// 驗證通過後
header("Location: $target");
exit;
優點:不依賴 Cookie,相容性極佳;缺點:URL 可見,需防範開放式重導向攻擊(驗證域名白名單)。

安全建議

  • 對 $refer 或 $url 嚴格驗證:僅允許本站域名、相對路徑,拒絕外部連結。
  • 登入後清除 Cookie/Session 中的回跳 URL,避免二次登入誤導向。
  • 若專案採用前後端分離,前端可自行儲存 sessionStorage.setItem('redirect', location.href),登入成功後由前端路由跳轉。

兩種方案各有適用場景:傳統 MVC 專案推薦方案一(集中攔截),單頁應用或簡單專案方案二更輕量。

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