PHP:如何检查 URL link 是否包含变量以防止重定向(其余代码有效)

PHP: How to check if URL link contains variable to prevent redirecting (rest of code working)

我是 PHP 的新手,希望有人能帮助我。

我试图在我所有页面中包含的 header 文件中涵盖以下场景:

  1. IF session 变量“status”未设置且页面名称不是“login” 或“user”然后重定向到登录页面。
  2. IF session 变量“status”未设置且页面名称为“user”且 未设置变量“resetToken”然后重定向到登录页面。

到目前为止,当我从浏览器访问所有页面时,我有以下内容适用于所有页面,但是当我使用来自如下电子邮件的link时,我仍然会被重定向 即使 link 包含变量“resetToken”:

示例 link:https://www.myurl.com/user.php?resetToken=abcde

我的PHP(在header中包括):

$baseURL = "https://www.myurl.com";
$pageURL = basename($_SERVER["REQUEST_URI"]);
$pageName = pathinfo(parse_url($pageURL, PHP_URL_PATH), PATHINFO_FILENAME);

if( (!isset($_SESSION["status"])) && ($pageName != "login") && ($pageName != "user") ){
    header("Location: " . $baseURL . "/login.php");
    exit;
}
if( (!isset($_SESSION["status"])) && ($pageName == "user") && (!isset($_GET["resetToken"])) ){
    header("Location: " . $baseURL . "/login.php");
    exit;
}

我有两个问题:

  1. 通过电子邮件访问页面时 $_GET 是否不起作用 link 或 我必须在这里更改其他内容吗?
  2. 有没有办法将这些检查合并到一个 IF 语句中 连续两个?

非常感谢您的帮助, 麦克

$baseURL = "https://www.myurl.com";
$pageURL = basename($_SERVER["REQUEST_URI"]);
$pageName = pathinfo(parse_url($pageURL, PHP_URL_PATH), PATHINFO_FILENAME);

if( (!isset($_SESSION["status"])) && 
    ($pageName != "login") && 
    ($pageName != "user")   
     ||  
    (!isset($_SESSION["status"])) && 
    ($pageName == "user") && 
    (!isset($_GET["resetToken"]))
    )
    {
       header("Location: " . $baseURL . "/login.php");
       exit;
    }

您有 2 个 if 条件并且您正在重定向到同一页面...您可以将它们组合成 1 个 if 条件。

  1. $_GET 无论在何处单击 url
  2. 都有效
  3. 合并这两个语句很容易,只需将它们用 () 包裹起来,然后用 ||
  4. 合并它们

PHP

if( 
    (
        (!isset($_SESSION["status"])) && ($pageName != "login") && 
        ($pageName != "user")
    ) || (
        (!isset($_SESSION["status"])) && ($pageName == "user") && 
        (!isset($_GET["resetToken"])) 
    )   
){
    header("Location: " . $baseURL . "/login.php");
    exit;
}

当它重定向时,即使你已经设置了令牌,你也应该在之前转储变量。设置令牌后,代码不应重定向。