网站重定向,如果没有登录

时间:2014-01-24 19:33:07

标签: php html forms

这是我的登录表单。又名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");
}
?>

现在,当我尝试从他们访问任何帐户时,我可以轻松打开其index page和其他页面,即使我没有登录。我怎么能禁止这个?我怎样才能避免网址重写?

例如。 admin的索引页面

尝试打开我的link正确的帐户是admin-admin也试错了..

提前致谢。

3 个答案:

答案 0 :(得分:1)

首先,您需要在适当的位置将重定向设置为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");
}

答案 1 :(得分:0)

您正在调用标题(“Location:index.php”)而没有任何条件。 这意味着您始终重定向到index.php。

对login.php的任何调用都将导致自动重定向到index.php。

我不知道$ personel-&gt; login()究竟是什么,但你的代码看起来应该是这样的:

$authorized = $personel->login();

if (!$authorized) {
   header("Location: index.php");
   exit();
} 

此外 - session_start()应位于代码的顶部。

希望这有帮助!

答案 2 :(得分:0)

您可以在每个页面的顶部进行检查,如果用户未登录,则将其重定向到适当的页面,例如登录页面。

这是实现这一目标的一种方法。

登录时,设置$ _SESSION变量(类似user_id),如下所示:

//If successful login:
$_SESSION['user_id'] = $userid_from_the_db;

请注意,在使用会话时,您必须将session_start();放在每个页面的最顶层。

然后,您可以在显示任何页面数据之前检查用户是否已登录。

类似的东西:

<?php
    protect_page();

保护页面可以如下所示:

if (isset($_SESSION['user_id'])===false) {
    echo '<p>Please log in first</p>';
    echo '<meta HTTP-EQUIV="REFRESH" content="5; url=login.php">';
}

考虑从phpAcademy查看这个(免费)教程:

Registration and Login - Procedural version

Registration and Login - OOP version


注意:

您可以使用以下任一方法重定向页面:

header("Location: pagename.php");

这是首选方法,但在使用此命令之前无法输出任何其他标头,否则它将失败。

<meta HTTP-EQUIV="REFRESH" content="5; url=pagename.php">

作为解决方法,您可以使用此方法重定向页面,并且奖励是它会在执行此操作之前等待指定的秒数(在这种情况下为5,如果您选择则为零)。

相关问题