Php 网站重定向,如果不登录
这是我的登录表。aka index.phpPhp 网站重定向,如果不登录,php,html,forms,Php,Html,Forms,这是我的登录表。aka index.php <form class="form-3" action="login.php?log=ok" method="post" > <input type="text" name="username" id="login" placeholder="Username"> <input type="password" name="password" id="password" placeholder="Password
<form class="form-3" action="login.php?log=ok" method="post" >
<input type="text" name="username" id="login" placeholder="Username">
<input type="password" name="password" id="password" placeholder="Password">
<input type="submit" name="submit" value="Submit">
</form>
这是我的登录检查。又名login.php
<?php
require_once 'classes/Personel.php';
$personel = new Personel();
$personel->setUsername($_POST['username']);
$personel->setPassword($_POST['password']);
$personel->login();
header("Location: index.php");
// REDIRECT
session_start();
if (strcasecmp($personel->getRole(), "LTO") == 0 ) {
$_SESSION['role'] = "LTO";
$_SESSION['personel'] = $personel;
header("Location: LTO");
}else if(strcasecmp($personel->getRole(), "LTFRB") == 0){
$_SESSION['role'] = "LTFRB";
$_SESSION['personel'] = $personel;
header("Location: LTFRB");
}else if(strcasecmp($personel->getRole(), "LGU") == 0){
$_SESSION['role'] = "LGU";
$_SESSION['personel'] = $personel;
header("Location: LGU");
}else if(strcasecmp($personel->getRole(), "ADMIN") == 0){
$_SESSION['role'] = "ADMIN";
$_SESSION['personel'] = $personel;
header("Location: admin");
}
?>
现在,当我试图从他们那里访问任何帐户时,我可以轻松地打开它的索引页面
和其他页面,即使我没有登录。我怎么能禁止呢?如何避免url重写
管理员的索引页
尝试打开我的帐户正确的帐户是管理员也尝试一个错误的
非常感谢。您正在无条件地调用header(“Location:index.php”)。
这意味着您总是重定向到index.php
对login.php的任何调用都将导致自动重定向到index.php
我不知道$personel->login()的具体功能,但您的代码应该如下所示:
$authorized = $personel->login();
if (!$authorized) {
header("Location: index.php");
exit();
}
<?php
protect_page();
另外,-session_start()应该位于代码的顶部
希望这有帮助 首先,您需要在适当的位置设置重定向到index.php,并附带一些条件 我明白你的问题,但你是不是在检查每一页的课时 您需要在每个页面的开头执行检查,以确定会话是否正确设置。否则重定向回index.php 您需要在每个页面之前实现以下代码:
session_start();
if(isset($_SESSION['role'])){
if($_SESSION['role'] != "ADMIN") { //change the "ADMIN" to your unique role per page
echo "Access denied";
exit();
}
else {
header("Location: index.php");
}
您可以在每个页面的顶部进行检查,如果用户未登录,则将其重定向到适当的页面,例如登录页面 这里有一种方法可以做到这一点 登录时,设置$会话变量(类似于
user\u id
),如下所示:
//If successful login:
$_SESSION['user_id'] = $userid_from_the_db;
if (isset($_SESSION['user_id'])===false) {
echo '<p>Please log in first</p>';
echo '<meta HTTP-EQUIV="REFRESH" content="5; url=login.php">';
}
请注意,在使用会话时,必须放置session_start()代码>位于每页的最顶端
然后,您可以在显示任何页面数据之前检查用户是否已登录
比如:
$authorized = $personel->login();
if (!$authorized) {
header("Location: index.php");
exit();
}
<?php
protect_page();
为什么在没有任何条件的情况下调用header(“Location:index.php”)?这意味着您总是重定向到index.php。您在任何情况下都保持了对index.php的重定向。我不明白你的会话代码是如何工作的!另外,$personel->login()
做什么?当我试图输入正确的帐户时,@Tzar。我转到预期页面。如果我尝试了错误的帐户,它将保留index.php,这就是我认为正确的原因。$\u会话
变量中是否存储了任何内容?因为如果它一直重定向到index,整个块似乎永远不会执行。phptry要打开我的帐户,正确的帐户是admin,也可以尝试错误的帐户。session\u start()
可以在代码中的任何位置,除非上面没有$\u session
变量!试着打开我的帐户。正确的帐户是admin admin,也尝试错误的帐户。@Tzar我知道,最好将它放在顶部,以避免将来出现问题。我想你输入错误了吗?