【问题标题】:Full password protected website完整的密码保护网站
【发布时间】:2016-05-09 18:33:29
【问题描述】:

美好的一天! 我正在尝试创建一个网站,您只能通过首先在首页输入密码来访问它(www.mywebsite.com/index.php)

一旦我输入密码,它将从我的 public_html 之外获取文件 home.html。

然后在该页面(home.html) 中将有使用变量 z (www.mywebsite.com/index.php?z=one) 的链接,该变量将返回 1.html 或其他页面。

这是我到目前为止尝试过的,但即使我使用 www.mywebsite.com/index.php?z=one 它仍然打开 home.html 我能得到一些帮助吗?和/或我正在尝试的可能吗?

<?php
$pass = $_POST['pass'];
if ($pass == "1234") {
    $page = $_GET['z'];
    if ($page == "one") {

        include("../1.html");
    } else {
        include("../home.html");
    }
} else {
    if (isset($_POST)) {
        ?>
        <!DOCTYPE html>
        <html lang="en">
            <form role="form" method="POST" style="margin: 0px" action="index.php">
                <input type="password" name ="pass" class="form-control" id="pwd">  </input>
                <input type="submit" class="btn btn-danger" value="Enter"></input>
            </form>
        </html>
    <?php
    }
}
?>

【问题讨论】:

  • 良好的代码缩进有助于提高可读性,但更重要的是调试

标签: php html passwords


【解决方案1】:

这不是解决这个问题的方法。

首先使用一个会话,但只在会话中保留一个isLoggedIn 标志而不是密码。

其次,所有脚本都可以在public_html文件夹中,但是你要做的是添加一个小脚本,检查所有脚本的登录状态,如果没有登录则抛出登录页面

这是一个简单的例子

login_check.php

<?php
    session_start();
    if ( ! isset($_SESSION['loggedIn']) || $_SESSION['loggedIn'] == 0) {
        header('Location: login.php');
        exit;
    }

现在在您的登录脚本中

登录.php

<?php
    session_start();
    if ( isset($_SESSION['loggedIn'] && $_SESSION['loggedIn'] == 1) {
        // already logged in
        header('Location: index.php.php');  // or some other page
        exit;
    }

    If ( "The password is correct" ) {   // this is of course pseudo code
        $_SESSION['loggedIn'] = 1;
        header('Location: somepage.php');
        exit;
    } else {
        unset($_SESSION['loggedIn']);
        header('Location: login.php');
        exit;
    }
?>
    

现在在所有其他脚本中

<?php
    // first thing is always to check if this user is logged in
    // so any access from a user not yet logged in just get
    // thrown to the login page, or maybe your index.php
    require_once 'login_check.php';

您还可以使用此会话来举行有用但不敏感的事情,例如

$_SESSION['user_id'];   // id of the users info in user table
$_SESSION['FirstName'];
$_SESSION['LastName'];
$_SESSION['nickname'];

以及任何其他可能对您的应用程序有用的信息,您不想每次都去数据库进行收集。

附加信息

您的 HTML 格式不正确

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Page Title</title>
</head>
<body>
<form role="form" method="POST" style="margin: 0px" action="index.php">
   <input type="password" name ="pass" class="form-control" id="pwd" />  
   <input type="submit" name="login" class="btn btn-danger" value="Login" />
</form>
</body>
</html>

【讨论】:

  • 谢谢,它运作良好,但在我点击输入/提交密码后。它尚未检测到我已登录,因此我需要刷新页面或再次登录。有什么办法解决吗?
  • 是的,我修改了login.php 页面。因此,现在您在成功登录尝试后会被发送到其他页面。
  • 有没有办法让 session=1 只停留几分钟然后返回到 session=0?或使用此自动注销?
  • 会话只有有限的生命周期。在 PHP.INI 文件中通过此参数 session.gc_maxlifetime = 1440 以秒为单位 See the manual for session handling 设置它在上次访问后保持存在的时间
  • 在 login.php 中,第三行 if ( isset($_SESSION['loggedIn'] &amp;&amp; $_SESSION['loggedIn'] == 1) { 有不平衡的括号。
【解决方案2】:

您可以将 get/post pass 存储在 $_SESSION['pass'] 这样的会话中 但你最好用 sha1 加密它,至少像

$_SESSION['pass'] = sha1($pass);

然后把它找回来

if($_SESSION['pass'] == sha1("1234")){}

【讨论】:

    【解决方案3】:

    您应该使用session

    但将密码存储在会话中并不是一个好习惯。

    <?php
    session_start();
    if(isset($_POST['pass'])){
        $_SESSION['p'] = md5($_POST['pass']);
        //$pass = $_POST['pass'];
        if($_SESSION['p'] == md5("1234"))
        {
            $page = $_GET['z'];
            if($page == "one")
                {
                include("../1.html");
                }
            else
                {
                include("../home.html");
                }
    
        }
    }
    ?>
    

    【讨论】:

      【解决方案4】:

      我相信这会对你有所帮助。

      <?php
      session_start();
      if (!empty($_POST['pass']) && $_POST['pass'] == "1234") {
          $_SESSION['pass'] = $_POST['pass'];
      }
      
      
      if (empty($_SESSION['pass'])) {
          ?>
          <!DOCTYPE html>
          <html lang="en">
              <form role="form" method="POST" style="margin: 0px" action="index.php">
                  <input type="password" name ="pass" class="form-control" id="pwd">  </input>
                  <input type="submit" class="btn btn-danger" value="Enter"></input>
              </form>
          </html>
          <?php
          die;
      }
      
      $page = $_GET['z'];
      if ($page == "one") {
      
          include("../1.html");
      } else {
          include("../home.html");
      }
      ?>
      

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 2012-12-13
        • 2013-03-02
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        相关资源
        最近更新 更多