这里有几个问题:我的最终目标是密码保护文件logged_in.php。
注意:我只是一个初学者/中级程序员,所以我想要清楚的解释,请。
首先,我在数据库表中设置了用户名和密码。
-
我有两个页面:login.php和logged_in.php(名称只是为了举例目的)。我如何"要求"用户首先通过login.php(登录过程),以获得访问logged_in.php(如果输入的用户名/密码是正确的)?
-
这是密码保护页面的最佳方式吗?
我试过了:
login:
<?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并按enter键时,它会从浏览器的顶部下拉菜单询问用户名/密码)。我不知道这是怎么回事。如果有人能告诉我这是如何工作的,我愿意完全无视我现在试图使用的方法(如果phpMyAdmin方法足够安全,并且相当容易实现)。
提前感谢!
使用$_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;
?>