首页 文章

密码保护页面?(使用db访问)

提问于
浏览
0

这里有几个问题:我的最终目标是密码保护文件logged_in.php .

注意:我只是初学者/中级程序员,所以我想要清楚的解释 .

首先,我在数据库表中设置了用户名和密码 .

  • 我有两个页面:login.php和logged_in.php(名称仅用于示例目的) . 我如何“要求”用户首先通过login.php(登录过程)以获取对logged_in.php的访问权限(如果输入的用户名/密码正确)?

  • 这是密码保护页面的最佳方法吗?

我尝试过的:

login.php中:

<?php
            $db_host="host";
            $db_user="user";
            $db_pass="pass";
            $db_name="name";
            $db_table="table";
            $user = mysql_real_escape_string(strip_tags($_POST['user']));
            $pass = mysql_real_escape_string(strip_tags($_POST['pass']));

            mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
            mysql_select_db($db_name) or die(mysql_error());

            if(isset($user) && isset($pass))
            {
                $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'";
                $result = mysql_query($sql);
                $count = mysql_num_rows($result);
                if($count == 1)
                {
                    header("location:logged_in.php");
                }
                else
                    header("location:bad_login.html");
            }
        ?>
  • 目前我的代码存在的问题是,有人可以直接输入logged_in.php的URL并访问该页面而不是“必须”首先通过login.php(我确信这对每个人都很明显 . ) .

  • 我把 require(login.php); 放在了logged_in.php的顶部;然而,这没有成功 .

  • 我已经检查了谷歌关于这个主题的一些很好的教程,不幸的是我找不到任何有明确解释的 .

  • 我还在stackoverflow上看到了关于这个主题的一些其他问题,但它们并没有真正帮助我 .

我也有兴趣能够使用phpMyAdmin使用的方法传递保护我的页面(当你输入URL并按下输入时,它会从浏览器顶部下拉菜单,询问用户名/密码) . 我不知道那是怎么回事 . 如果有人可以告诉我它是如何工作的,我愿意完全忽略我现在尝试使用的方法(如果phpMyAdmin方法足够安全并且相当容易实现) .

提前致谢!

1 回答

  • 2

    使用$ _SESSION变量:

    <?php
    
                session_start();
    
                $db_host="host";
                $db_user="user";
                $db_pass="pass";
                $db_name="name";
                $db_table="table";
    
                mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
                mysql_select_db($db_name) or die(mysql_error());
    
                $user = mysql_real_escape_string(strip_tags($_POST['user']));
                $pass = mysql_real_escape_string(strip_tags($_POST['pass']));
    
                if(isset($user) && isset($pass))
                {
                    $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'";
                    $result = mysql_query($sql);
                    $count = mysql_num_rows($result);
                    if($count == 1)
                    {
                        $_SESSION['username'] = $user;
                        header("location:logged_in.php");
                        exit();
                    }
                    else
                        header("location:bad_login.html");
                        exit();
                }
            ?>
    

    logged_in.php:

    <?php
    
    session_start();
    
    // check if $_SESSION was setting before
    if (!isset($_SESSION['username']))
    {
        header("Location: login.php?e=access_denied");
        exit();
    }
    ?>
    

    phpMyAdmin登录是不同的,因为使用MySQL用户名和密码登录,所以phpMyAdmin不需要像你的代码那样创建一个数据库和表来登录

    您还需要注销:

    logout.php

    <?php
    
    session_start(); // <-- Oops!!
    
    // unset all $_SESSION variables
    session_unset();
    session_destroy();
    header("Location: logged_in.php?m=logout_success");
    exit;
    
    ?>
    

相关问题