【问题标题】:PHP Session formsPHP 会话表单
【发布时间】:2014-09-06 12:05:20
【问题描述】:

我在使用 PHP 会话时遇到了一些困难。 这样做的目的是防止用户使用直接 URL 访问管理员面板/页面。

我创建了一个登录表单并且效果很好 (login.php) 正确输入用户名和密码后,登录表单会将用户带到管理面板(admin.php)

但是,当我将以下脚本 PHP 添加到 (admin.php) 页面时,它不起作用。 当我在登录页面上输入用户名和密码时,它总是失败并重定向我到 login.php

admin.php 上的脚本用于阻止用户访问该页面,如果 会话变量未设置

非常感谢任何帮助:)

<link rel="stylesheet" type="text/css" href="admin_panel.css" media="all">
</head>
<body>

    <form method="post">

      <input type="text" name="user_name" placeholder="Username" required="required" />
      <input type="password" name="user_pass" placeholder="Password" required="required" />
      <button type="submit" class="btn btn-primary btn-block btn-large" name="login">Let me in.</button>
    </form>
</div>
</body>




    //===================================== login.php


    <?php 

      include("includes.php");
      if(isset($_POST['login'])) { 

      echo $user_name = mysql_real_escape_string ($_POST['user_name']); 
      echo $user_pass  = mysql_real_escape_string ($_POST['user_pass']);
      $encrypt = md5($user_pass);  


       $select_user = "select * from users where user_name= '$user_name' AND user_password =    '$user_pass'";
       $run_user = mysql_query($select_user);


        if(mysql_num_rows($run_user)>0){  // what does this function DO?
        $_SESSISON['user_name'] =$user_name;      


         echo "<script> window.open('admin_panel.php?logged=You have logged in','_self' )</script>";
          }

         else {
         echo "<script> alert('Wrong details')</script>";
            } }

        ?>

    </html





    // admin.php script ====================



        <?php
        session_start();
        if(!isset($_SESSION['user_name'])) {
        echo "<script>window.open('login.php','_self')</script>";
        }

        else {     // ELSE CLOSED BOTTOM OF THE PAGE

        ?>


        <!DOCTYPE html>
        <html lang="en">
        <head>
        <meta charset="utf-8">
        <title>Admin page</title>
        <link rel="stylesheet" type="text/css" href="admin_panel.css" media="all">
        </head>
        <body>



          <a href="home.php?view_comments"> comments(0)</a>
          <a href="admin_panel.php?insert_post"> Insert New Post </a>
          <a href="logout.php"> Admin Logout </a>




          <?php   

          if(isset($_GET['insert_cat'])) { 
          include("insert_cat.php");
          }

          if(isset($_GET['insert_post'])) {
          include("insert_post.php");
          }

          ?>


        </body>
        <?php } ?>   // CLOSE ELSE
        </html>

【问题讨论】:

  • 你能发布你的 login.php 代码吗? @andrew 如果您禁用 JavaScript,login.php 页面将无法打开,管理部分本身位于 else 语句中,因此如果未设置 user_name 会话,它将不会运行。
  • Erhm,如何通过简单地禁用 javscript 来“入侵”该页面?没有 javascript,您根本无法登录(因为会话变量永远不会被设置;取决于到目前为止我们没有看到的 login.php)。
  • @MrTux 好吧,也许“黑客”是夸大其词,但它肯定会让我看到他不想要的页面
  • @andrew:不,你为什么这么认为?
  • @MrTux 啊。我从来没有注意到else{ 应该更彻底地阅读问题:p

标签: php forms session


【解决方案1】:

最好使用 Zend、Symfony、Laravel 等框架中的身份验证系统,而不是 PHP 中包含的 $_SESSION。 要重定向用户,您可以使用函数header()

例如:

header('Location: login.php');

将charset设置为'UTF-8 without BOM'很重要,并且在header()之前不能是任何输出

【讨论】:

  • 感谢 Dikeyi 已更新我的代码以显示 login.php 和 admin.php 任何想法为什么这不起作用?非常感谢,p
  • 正确 "$_SESSISON['user_name'] =$user_name;"到 $_SESSION['user_name'] = $user_name;
  • 哦,哇,我不敢相信我错过了!你是一个伟大的人,我会测试一下,看看会发生什么
  • 您的评论回答了与您的“答案”相反的问题。也是BOM,不是BOOM。
  • 拉贾。我的意思是:你是对的,伙计。是物料清单。我在编辑相关代码之前给出了答案。
猜你喜欢
  • 2016-05-10
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多