我一直在学习PHP和MySQL一段时间,我遇到了一个问题。 我创建了一个用户数据库(MySQL),登录表单和页面,您可以在成功登录后重定向该页面。
登录页面
<?php
require_once 'login.php'; //connecting to db
$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());
session_start(); //
if (isset($_POST['username']) &&
isset($_POST['password']))
{
$username = $_POST["username"];
$password = $_POST["password"];
$salt1 = "qm&h*";
$salt2 = "pg!@";
$query = "SELECT * FROM login WHERE username='$username'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) die("Wrong username or password.");
elseif (mysql_num_rows($result))
{
$row = mysql_fetch_row($result);
$crypt_login_pass = md5("$salt1$password$salt2");
if ($crypt_login_pass == $row[2])
{
$_SESSION['username'] = $username;
$_SESSION['password'] = $crypt_pass;
header("Location: index_account.php");
exit;
}
else {
die("Wrong username or password.");
}
}
}
?>
代码运行完美,直到我添加了header("Location: index_account.php")
。我过去只有die("You are now logged in.")
。
这是您被重定向到的页面:
<?php
session_start();
if (isset($_SESSION['username']) &&
isset($_SESSION['password']))
{
$username = $_SESSION['username'];
$password = $_SESSION['password'];
echo "Your username is '$username'
and your crypted password is '$password'.";
}
else echo "Please <a href=index.php>click here</a> to log in.";
?>
所有这些代码都在localhost上运行。 问题是$ _SESSION ['username']和$ _SESSION ['password']不会转移到第二页(index_account.php)。我看了很多帖子,我发现的最相似的是:Session variables lost after header redirect但没有安装。 请注意,这是我的第一个编程语言(不包括HTML和CSS),我对此仍然很新。
P.S。抱歉,我的英语。这不是我的母语。
提前致谢!
答案 0 :(得分:5)
您正在使用不存在的变量分配密码:
$_SESSION['password'] = $crypt_pass;
您的代码定义了$crypt_login_pass
,因此您应该使用它:
$_SESSION['password'] = $crypt_login_pass;
此外,$_SESSION['username']
的值设置为$username
,如果未设置$_POST['username']
,则该值为空:
if (isset($_POST['username']) &&
isset($_POST['password']))
{
$username = $_POST["username"];
要更正此问题,请确保您的表单已在“用户名”字段中发布了数据。