PHP:如何检查URL链接是否包含变量以防止重定向(其余代码工作)


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

我是PHP新手,希望有人能帮我解决这个问题。

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

  1. 如果会话变量"status"未设置且页面名称不是"login"或" user ",然后重定向到登录页面。
  2. 如果未设置会话变量"status"且页面名称为"user"和变量"resetToken"未设置,则重定向到登录页面。

到目前为止,我有以下从浏览器访问它们时适用于所有页面,但当我使用像下面这样的电子邮件链接时,我仍然得到重定向,即使链接包含变量"resetToken":

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

我的PHP (in header include):

$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不工作时,通过电子邮件链接或访问页面这里还需要修改什么吗?
  2. 是否有办法将这些检查合并在一个IF语句中

非常感谢您的帮助。迈克

  1. $_GET不工作,无论在哪里点击url
  2. 合并两个语句很容易,只需将它们与()包装并与||合并即可
PHP

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

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

$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条件