我目前正在学习PHP,而且我遇到了与PHP和HTTP身份验证相关的小问题。
我测试在MySQL数据库中存储用户和密码,并创建登录表单来验证用户。我可以显示表单,但是当我输入用户名和密码(我知道在数据库中)并点击" ok"时,窗口只是不断重置并重新显示空白输入框。
我认为我已经将问题跟踪到$ _SERVER [' PHP_AUTH_USER']和$ _SERVER [' PHP_AUTH_PW']没有被弹出式身份验证窗口设置为我发送数据,第一个" if"声明没有执行。有谁知道为什么会这样?
这是我代码中的一个片段:
<?php
require_once 'login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if(!$db_server) die("Unable to connect to mySql: " . mysql_error());
mysql_select_db($db_database) or die("Unable to select database: " . mysql_error());
echo "Databse selected<br/>";
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']))
{
echo "Auth found<br/>";
$un_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_USER']);
$pw_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_PW']);
$query = "SELECT * FROM users WHERE username='$un_temp'";
$result = mysql_query($query);
if(!$result) die("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result))
{
$row = mysql_fetch_row($result);
$salt1 = "qm&h*";
$salt2 = "pg!@";
$token = md5("$salt1$password$salt2");
if($token == $row[3]) echo "$row[0] $row[1] : hi $row[0], you are now logged in as '$row[2]'";
else die("Invalid username/password combo");
}
}
else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTTP/1.0 401 Unauthorized');
echo("Authing<br/>");
die("Please enter your username and password");
}