限制直接页面访问

时间:2011-07-28 23:31:33

标签: php redirect access-control

为了保护我正在处理的网站的管理员区域,我创建了一个包含

的index.php
if (isset($_POST['password']) && isset($_POST['userName'])) {
        if($_POST['password']==$pass && $_POST['userName']==$username)
        {
            header( 'Location: admin.php' ) ;
        }

这会重定向到名为admin.php的同一文件夹中的文件。问题是,如果我写localhost/folder/admin.php,我可以访问此文件。请告诉我如何限制直接访问此页面。访问它的唯一方法应该是在用户名和密码之后从index.php。

3 个答案:

答案 0 :(得分:7)

设置会话变量并在每次访问admin.php

时检查它
<?php
  if (isset($_POST['password']) && isset($_POST['userName'])) {
      if ($_POST['password'] == $pass && $_POST['userName'] == $username) {
          if (!session_id())
              session_start();
          $_SESSION['logon'] = true;

          header('Location: admin.php');
          die();
      }
?>

//admin.php 

if (!session_id()) session_start();
if (!$_SESSION['logon']){ 
    header("Location:index.php");
    die();
}

答案 1 :(得分:7)

您应该查看PHP会话。您可以在该重定向文件中设置会话变量“isLogged”,然后检查admin.php是否已注册该会话变量,如果没有重定向到登录页面!

session_start();
if (isset($_POST['password']) && isset($_POST['userName'])) {
        if($_POST['password']==$pass && $_POST['userName']==$username)
        {
            header( 'Location: admin.php' ) ;
            $_SESSION['isLogged'] = true;
        }

admin.php的

session_start();
if(!$_SESSION['isLogged']) {
  header("location:login.php"); 
  die(); 
}

注意:session_start();必须在$ _SESSION全局使用之前调用。

答案 2 :(得分:4)

设置一个表示用户已成功登录的会话值,在每个要保护的页面上检查它,如果未设置该值,则重定向到登录。