在这里结合问题:我的最终目标是密码保护文件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方法足够安全并且相当容易实现)。
提前致谢!
答案 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;
?>