PHP:如何检查 URL link 是否包含变量以防止重定向(其余代码有效)
PHP: How to check if URL link contains variable to prevent redirecting (rest of code working)
我是 PHP 的新手,希望有人能帮助我。
我试图在我所有页面中包含的 header 文件中涵盖以下场景:
- IF session 变量“
status
”未设置且页面名称不是“login
”
或“user
”然后重定向到登录页面。
- 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;
}
我有两个问题:
- 通过电子邮件访问页面时 $_GET 是否不起作用 link 或
我必须在这里更改其他内容吗?
- 有没有办法将这些检查合并到一个 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
条件。
$_GET
无论在何处单击 url 都有效
- 合并这两个语句很容易,只需将它们用
()
包裹起来,然后用 ||
合并它们
PHP
if(
(
(!isset($_SESSION["status"])) && ($pageName != "login") &&
($pageName != "user")
) || (
(!isset($_SESSION["status"])) && ($pageName == "user") &&
(!isset($_GET["resetToken"]))
)
){
header("Location: " . $baseURL . "/login.php");
exit;
}
当它重定向时,即使你已经设置了令牌,你也应该在之前转储变量。设置令牌后,代码不应重定向。
我是 PHP 的新手,希望有人能帮助我。
我试图在我所有页面中包含的 header 文件中涵盖以下场景:
- IF session 变量“
status
”未设置且页面名称不是“login
” 或“user
”然后重定向到登录页面。 - 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;
}
我有两个问题:
- 通过电子邮件访问页面时 $_GET 是否不起作用 link 或 我必须在这里更改其他内容吗?
- 有没有办法将这些检查合并到一个 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
条件。
$_GET
无论在何处单击 url 都有效
- 合并这两个语句很容易,只需将它们用
()
包裹起来,然后用||
合并它们
PHP
if(
(
(!isset($_SESSION["status"])) && ($pageName != "login") &&
($pageName != "user")
) || (
(!isset($_SESSION["status"])) && ($pageName == "user") &&
(!isset($_GET["resetToken"]))
)
){
header("Location: " . $baseURL . "/login.php");
exit;
}
当它重定向时,即使你已经设置了令牌,你也应该在之前转储变量。设置令牌后,代码不应重定向。