创建基本的登录页面

时间:2014-03-02 19:02:39

标签: php html login

我的目的是创建一个页面,该页面最初显示一个基本表单,其中包含输入密码的文本字段和提交按钮。提交后,表单会将值发送回同一页面,并在其中进行检查。这发生在PHP文件中,而不是在数据库中。如果密码正确,将显示相关的HTML。这就是我所拥有的:

<?php
    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);
    if(isset($_POST["logout"])){
        session_destroy();
    }elseif(isset($_POST["auth"])){
        if($_POST["auth"]=="password"){
            session_start();
            $_SESSION["admin"]="true";
        }
    }
    if(!isset($_SESSION["admin"])){
?>
    <form action="/admin.php" method="post">
        <input type="text" name="auth"><input type="submit">
    </form>
<?php
    }elseif($_SESSION["admin"]="true"){
?>
<section>
<!--HTML goes here-->
</section>
<section>
    <form action="/admin.php" method="post">
        <input type="hidden" name="logout" value="logout">
        <input type="submit">
    </form>
</section>
<?php }else{echo "Incorrect password";}?>

现在这部分有效。输入正确的密码将显示该人应该看到的HTML。如果输入的密码不正确,最后一行的回显将不会显示。它只是回到表单,就像第一次打开页面一样。

此外,在成功输入密码后,我收到了一些警告:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\top.php:28) in D:\xampp\htdocs\admin.php on line 13
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\top.php:28) in D:\xampp\htdocs\admin.php on line 13

...第13行只是session_start();

虽然我已经读过在PHP文件中存储密码存在安全问题,但这似乎不是一个主要问题,因为不超过两个人将使用包含工具的页面来操作如果搞乱或删除,这是一个主要问题。但是,如果这是一个比我想象的更大的安全问题,请告诉我。

5 个答案:

答案 0 :(得分:0)

建议session_start()应该是代码的第一行,您可以与所有用户开始会话,但使用存储在会话变量中的一些其他数据来验证和授权访问。

答案 1 :(得分:0)

对于下面的警告,您可以在页面顶部添加<?php ob_start(); ?>。这样做可能会让你摆脱这些警告。

答案 2 :(得分:0)

在会话标题之后添加包含的文件。我没有看到在该页面中猜测它们需要的问题中发布的php代码中包含的文件的任何使用。所以只需在会话标题之后添加它们,这将最有可能应该解决你的问题

OR

将此行添加到php.ini

output_buffering = On
  

PHP文档建议将 设置为数字,而不仅仅是 On &gt;&gt; http://us3.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

OR

.htaccess添加:

php_value output_buffering On

来源: session_start() error

答案 3 :(得分:0)

session_start();

当密码不正确时,除非使用正确的密码发布表单,否则这行代码永远不会被执行。

将该行放在顶部,然后将其从现在的位置移除。

答案 4 :(得分:0)

以下是一些基于原始代码的代码。

经过测试。

您的某个原始测试中存在一个错误,其中包含&#39; =&#39;而不是&#39; ==&#39;。

当您使用PHP选择HTML的不同部分时,我已经使用了“替代控制”#39;语法,因为它读得更好。

代码中有很多注释。随意删除&#39; em。 : - )

<?php
// PHP 5.1.18 on windows XP (XAMPP) -- i use buffered output    
session_start(); // assume we always have sessions -- can be destroyed later if required

/*
 * Using Alternate Control syntax for control structures
 *
 * This is 'cos we are using PHP to show different portions of HTML
 */

$passwordError = false; // assume password is ok


// I have these already in my development enviroment
//    ini_set('display_errors',1);
//    ini_set('display_startup_errors',1);
//    error_reporting(-1);

    if (isset($_POST["logout"])) { // logout form submitted...
        session_destroy();
        die(__FILE__ .' : i am done...');

    } elseif (isset($_POST["auth"])) { // hard coded password! fine for testing!
        if ($_POST["auth"] == "password") { 
             $_SESSION["admin"] = "true";
        } else {
             $passwordError = true; // failed password check
        }
    }
?>

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Q22131957</title>
  </head>

  <body>
    <h1>Q22131957 Login screen</h1>

  <?php if (!isset($_SESSION["admin"]) || $_SESSION['admin'] != "true"): // need the admin login form to be shown?>

    <form action="" method="post"> <!-- the form must come back to this script for checking... -->
        <input type="text" name="auth"><input type=submit value="admin login">
     </form>

     <?php if ($passwordError): ?>
        <strong> Incorrect password</strong>
     <?php endif; ?>

   <?php endif;  // end of admin attempt to login... ?>


  <?php if (isset($_SESSION["admin"]) && $_SESSION["admin"] == "true"): // admin is logged in successfully ?>

  <!--
    /*
     * Normally, you would just redirect to a different URL where
     * all the admin actions live.
     *
     * Here i just drop through to the 'logged in admin' part of the script
     * as the original script did.
     *
     */
  -->
<section>
 <!--HTML goes here-->
  <p> we logged in as ADMIN! </p>
</section>
<section>
    <!-- this form returns to this script! -->
    <form action="" method="post">
        <input type="hidden" name="logout" value="logout">
        <input type="submit" value="logout">
    </form>


    <!-- divert to admin.php screen via a form -- testing only -->
    <form action="admin.php" method="post">
        <input type="hidden" name="continue" value="continue">
        <input type="submit" value="continue to admin.php...">
    </form>

</section>
<?php endif; // end of successful logged in admin ?>

</body>
</html>