簡體   English   中英

PHP重定向回上一頁

[英]PHP redirect back to previous page

我為login.php頁面所做的是,如果用戶已登錄,他將被重定向到first.php頁面。

session_start();
if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
    header("Location: first.php");
} 

在所有其他頁面中,如果用戶尚未登錄,則會將其重定向到login.php頁面。

session_start();
if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
    header("Location: login.php");
} 

問題在於:有沒有辦法將用戶重定向到他來自的地方? 如果您在未登錄時嘗試訪問second.php,則會立即將您重定向到login.php頁面; 一旦你登錄,你可以重定向回second.php而不是first.php嗎?

我曾嘗試使用$_SERVER['HTTP_REFERER'] ,但此變量不包含任何內容; 它只包含一些東西,如果你在這里因為你點擊了一個鏈接。

  1. 在他們嘗試登錄的頁面上設置包含該頁面的URL的會話變量。
  2. 然后將它們重定向到登錄頁面。
  3. 成功登錄后,從會話中獲取以前的URL並將其重定向到那里。

讓重定向的頁面設置一個會話變量,該變量是該頁面的URL:

session_start();
if (!$logged_in)
{
    $_SESSION['redirect_url'] = $_SERVER['PHP_SELF']; 
    header('Location: login.php');
    exit;
}

然后在成功登錄后將其重定向到該URL:

session_start();

/* Login code goes here */

$redirect_url = (isset($_SESSION['redirect_url'])) ? $_SESSION['redirect_url'] : '/';
unset($_SESSION['redirect_url']);
header("Location: $redirect_url", true, 303);
exit;

以上可以改進,但這應該給你的想法。

$ _SERVER ['HTTP_REFERER']取決於Web瀏覽器,並非所有瀏覽器都將引用者發送回服務器。 許多大型網站使用的更好的方法是將當前頁面傳遞到登錄頁面:

header("Location: first.php?".$currentPageUrl);

$ current_SUrl可以從$ _SERVER ['REQUEST_URI']或$ _SERVER ['PHP_SELF']獲取;

登錄后,您可以再次將用戶重定向到$ currentPageUrl。

除此之外,將用戶名和密碼存儲在$ _SESSION中聽起來並不合適,但這是一個單獨的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM