我是PHP新手,希望有人能帮我解决这个问题。
我试图在包含在我所有页面的头文件中涵盖以下场景:
- 如果会话变量"
status
"未设置且页面名称不是"login
"或"user
",然后重定向到登录页面。 - 如果未设置会话变量"
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;
}
我有两个问题:
- $_GET不工作时,通过电子邮件链接或访问页面这里还需要修改什么吗?
- 是否有办法将这些检查合并在一个IF语句中
非常感谢您的帮助。迈克
-
$_GET
不工作,无论在哪里点击url - 合并两个语句很容易,只需将它们与
()
包装并与||
合并即可
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
条件