【问题标题】:Session variables lost after redirect (using header) [closed]重定向后会话变量丢失(使用标头)[关闭]
【发布时间】:2013-05-17 18:41:08
【问题描述】:

我学习 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.";
?>  

所有这些代码都在本地主机上运行。 问题是 $_SESSION['username'] 和 $_SESSION['password'] 不会转移到第二页(index_account.php)。我读过很多帖子,我发现最相似的是:Session variables lost after header redirect 但没有回答。 请注意,这是我的第一种编程语言(不包括 HTML 和 CSS),对此我还是很陌生。

附:对不起我的英语。这不是我的母语。

提前致谢!

【问题讨论】:

标签: php


【解决方案1】:

您正在使用不存在的变量分配密码:

$_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"];

要更正此问题,请确保您的表单已在“用户名”字段中发布数据。

【讨论】:

  • 非常感谢!不敢相信事情就这么简单,我如此专注于 $_SESSION,我才知道我完全忽略了这么明显的错误。
猜你喜欢
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2023-03-29
  • 2010-12-24
  • 2014-08-14
  • 2014-01-04
相关资源
最近更新 更多