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

时间:2011-08-29 03:13:36

标签: php mysql database phpmyadmin password-protection

在这里结合问题:我的最终目标是密码保护文件logged_in.php。

注意:我只是初学者/中级程序员,所以我想要明确的解释。

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

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

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

  3. 我尝试了什么:

    的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 个答案:

答案 0 :(得分: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;

?>