php - 登录时它没有带我到正确的位置
问题描述
使用 PHP 我试图检查用户是管理员还是普通用户。如果他们是普通用户,那么它应该将他们重定向到 home.php。但是,如果他们是管理员,那么它应该将他们重定向到 admin.php。当输入标准用户的用户名和密码时,它会将我发送到 home.php,这是预期的。但是,每当我使用管理员登录时,它都不会将我定向到 admin.php。相反,它会将我重定向到 authentication.php,这是检查用户名和密码是否正确的脚本。
我尝试了 2 个不同的代码块,第一个完全没有工作,因为它出现了语法错误。但是,这个应该可以正常工作,但事实并非如此。我还检查了数据库中是否存储了正确的数字。1 是标准用户,2 是管理员。我已经在我的个人资料页面上打印了管理员级别,所以我知道它正在正确存储数据。
if (isset($_SESSION['admin'])) {
if ($_SESSION['admin'] === "2") {
header('Location: admin.php');
} else {
header('Location: home.php');
}
} else {
header('Location: home.php');
}
我希望当管理员登录时它应该将我引导到 admin.php,但是我只是被引导到 authentication.php 的空白屏幕。
解决方案
你的代码是准确的。例如
<?php
$_SESSION['admin'] = "2";
if (isset($_SESSION['admin'])) {
if ($_SESSION['admin'] === "2") {
header('Location: admin.php');
} else {
header('Location: home.php');
}
} else {
header('Location: home.php');
}
?>
如果您在 localhost 上运行它,它会正确重定向到 admin.php 页面。当您使用 === 时,您必须确保您的数据类型匹配。
例如:
<?php
$a = "1";
if ($a === 1) {
echo "not ok";
}
if ($a == 1) {
echo "ok";
}
if ($a === "1") {
echo "This time ok";
}
if ($a == "1") {
echo "it's also ok";
}
?>
第一个回显没有显示为无法匹配的数据类型。所以我建议您将 === 更改为 == 并查看。希望它能解决你的问题
<?php
if (isset($_SESSION['admin'])) {
if ($_SESSION['admin'] == "2") {
header('Location: admin.php');
exit();
} else {
header('Location: home.php');
exit();
}
} else {
header('Location: home.php');
exit();
}
?>
推荐阅读
- python - Why can not access the uwsgi server with ERR_EMPTY_RESPONSE response?
- c - Saving two different structures in binary files and read it
- python - Python grab all UDP Datagrams
- c# - Raise an Event Except when something happpen
- python - 如何阻止我的 Tkinter 窗口冻结?
- python - 大维度numpy数组中的选择问题
- python - Python SQLite更新功能不起作用
- rust - 我应该用 ; 结束表达式吗?在一个循环内?
- kubernetes - Kubernetes 入口 + Apache 气流
- java - 未应用 Spring Security 配置