if(isset($ _ SESSION [“Username”])麻烦

时间:2016-04-27 05:55:58

标签: php

我正在创建一个管理页面..我需要让这个页面只对某个有用的用户可访问!然后我试图让任何未登录的用户无法访问,因此我使用了 -

    if (isset($_SESSION["Username"]) && !isset($_POST["LOGIN"]))
    if($_SESSION["Username"] == "sara")

在每个if语句上都会显示一条消息..如果用户没有首先登录,如果他不是管理员,但是不管怎样,即使管理员访问它,第一条消息也会出现..它让它访问页面,它显示表单,但消息仍然显示在页面的底部..我的代码是一团糟,我已经尝试了两天!有人可以帮我吗?我试图添加另一个,但我得到一个错误..这是完整的代码 -

<?php

session_start();
include 'header.php';
if (isset($_SESSION["Username"]) && !isset($_POST["LOGIN"])) {
  if($_SESSION["Username"] == "sara") {
    $conn = new mysqli($database_host, $database_login, $database_pass, $database_name);
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    } else {
      $sql = "SELECT `cat_id` , `cat_name` FROM categorys";
      $result = $conn->query($sql);
    }

    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    } else {
      if(isset($_POST['Submit'])) {
        switch($_POST['Submit']) {
          case 'Submit2': 
            if ($conn->connect_error) {
              die("Connection failed: " . $conn->connect_error);
            } else {
              $Thecategory  =  $_POST["Thecategory"];
              $q="INSERT INTO categorys( cat_name) VALUES ('$Thecategory')";
              if (mysqli_query($conn, $q)) {
                echo "New record created successfully 2222";
              } else {
                echo "Error: " . $q. "<br>" . mysqli_error($conn);
              }
            }
            break;
          case 'Submit1':
            $Levelid = $_POST["Levelid"];
            $Levelserial = $_POST["Levelserial"];
            $word = $_POST["word"];
            $Thecategoryid  =  $_POST["taskOption"];
            $picfile = $_POST["picfile"];
            $fullword = $_POST["fullword"];
            $spelledword= $_POST["spelledword"];

            $sql="INSERT INTO questions( level_id, level_serial, q_word,q_cat_id , pic_file, word_file, s_word_file)
              VALUES ('$Levelid','$Levelserial',  '$word','$Thecategoryid ','$picfile' ,'$fullword','$spelledword')";

            if (mysqli_query($conn, $sql)) { 
              echo "New record created successfully";
            } else {
              echo "Error: " . $sql . "<br>" . mysqli_error($conn);
            }
            break;
        }
      } else {
        echo "
        <!DOCTYPE html>
        <html>
        <form>
        //form
          </form >

        <form  method=\"post\">

          <label >Level id :</label>
        <br>
          <input type=\"text\" name=\"Levelid\" ><br>
          <label >  Level serial:</label>
          <br>
          <input type=\"text\" name=\"Levelserial\" ><br>
          <label > The word is:</label>
        <br>
          <input type=\"text\" name=\"word\" ><br>
          <label >The pic file is:</label>
          <br>
          <input type=\"text\" name=\"picfile\" v><br>
          <label > The full word  file :</label> 
          <br>
          <input type=\"text\" name=\"fullword\" ><br>
           <label >The spelled word file  :</label> 
        <br>
          <input type=\"text\" name=\"spelledword\" ><br>

         ";

        echo"
        <div >
        <label for=\"The category \">The category </label></br>
        <select name=\"taskOption\">

        ";

        if ($result->num_rows > 0) {
          while($row = $result->fetch_assoc()) { ?>
            <option value="<?php echo $row['cat_id']; ?>">
            <?php echo $row['cat_name']; ?>
            </option> <?php } ?>
          </select> 
        <?php } ?>        
        <br><br>
        <?php
        echo"
          <input type=\"Submit\" value=\"Submit1\" name=\"Submit\">

        </form>

        </div>

        </body>
        </html>


        ";
      }
    }
  }

  echo "
    <head>
    <title>Relogin Please </title>
    </head>
    <body>
    <center>
    <br/> <br/>
    <div id=\"content1\">
      <div id=\"relog\">
      <h2 style=\" color:black ; font-size: 25px;\">you're not admin </h2>
    <a href=\"login.php\"><img src=\"PIC/NIE7J6OOT.PNG\" ></a>
      </div>
    </div>
    <br/> <br/>
    </center>
    </body>

    ";
} else {
  echo "
  <head>
  <title>Relogin Please </title>
      </head>
  <body>
  <center>
  <br/> <br/>
  <div id=\"content1\">
    <div id=\"relog\">
    <h2 style=\" color:black ; font-size: 25px;\">youare not admin </h2>
    <a href=\"login.php\"><img src=\"PIC/NIE7J6OOT.PNG\"></a>
    </div>
  </div>
      <br/> <br/>
  </center>
  </body>
  ";
}
?>

<?php include 'footer.php';?>

我需要发表其他声明,但我不知道在哪里!请有人帮忙!

1 个答案:

答案 0 :(得分:0)

此代码不再安全:

如果mypage.php包含此代码:

session_start();
$_SESSION['Username']=='sara';
echo "<a href='http://the.link-to-your-admin_page.php' target='_blank'>link</a>";

如果点击了该链接,则会话管理员1将被带到您的页面,并且会出现编辑按钮。

最安全的方法是在登录后立即设置令牌(这是一个非常简单的步骤)。 例如$token = md5(uniqidsession(rsand(), true)); $_SESSION['token']=$token;

在每个页面的顶部放置如下内容:

if(!isset($_SESSION['token'])){ die('Access Denied');}
if(!isset($_SESSION['Username'])){ die('Access Granted');}

首先检查SESSION中的令牌进位,然后检查用户ID,包括用户的权限级别。但是,只有你知道sara作为管理员,这是一个以防万一的预防措施。这只是一种简单的方法,在开头添加更多的指纹扫描代码,使拦截sessionid变得复杂。