Php 网站重定向,如果不登录

Php 网站重定向,如果不登录,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

这是我的登录表。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"> 
   <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我知道,最好将它放在顶部,以避免将来出现问题。我想你输入错误了吗?