0

我已经检查了正常的东西,比如 php 标签之前的空白,并且有一个 session_start() 但我无法解决这个问题。我正在为客户制作一个登录系统,所以这是至关重要的东西。

本质上,一旦我进入第二页 $_SESSION['username']; 是空的。我已经将它打印出来并且它是空的,但是 atm 会激活标题重定向,您可以在代码中看到它。

提前感谢您收到的任何帮助:)

相关代码:

<?php
session_start();

include '../resources/methods/Library.php';

if(isset($_SESSION['username']))
{
    //User already logged in!
    header('Location: Index.php');
}

//Username and password submitted by user
$usernameSubmitted = $_POST['username'];
$passwordSubmitted = $_POST['password'];

if($usernameSubmitted != "" && $passwordSubmitted != "")
{
    //User has entered both a username and a password. We shall validate them

    //Connect to database and select all the admin accounts
    connectToDB();
    $query = "SELECT * FROM admins" or die(mysql_error());
    $data = mysql_query($query) or die(mysql_error());
    $numberOfAdmins = mysql_num_rows($data) or die(mysql_error());


    //Check if the username corresponds to any found in the database                        
    $usernameValid = false;

    for($i = 0; $i < $numberOfAdmins; $i++)
    {
        if($usernameSubmitted == mysql_result($data, $i, "Username"))
        {
            $userToLogInAs = $i;
            $usernameValid = true;
        }
    }

    //If username is valid, check password
    if($usernameValid != false)
    {
        //Passwords are held as blowfish encryptions for security. Encypt this so we can compare
        $encryptedPasswordSubmitted = crypt($passwordSubmitted, '$2a$07$buzzybees5hivestottenhoe$');

        if($encryptedPasswordSubmitted == mysql_result($data, $userToLogInAs, "Password"))
        {
            //Create a session variable so the user remains logged in
            $_SESSION['username'] = $usernameSubmitted;

            //User entered the correct username and password, redirect them to the website.
            header('Location: Index.php');
        }
    }

    //If we've got this far then the user didn't authenticate successfully.
    $message = "<h2>Sorry, Invalid Credentials</h2><p>Check that you're tying your username and password correctly.</p>";
}

?>

下一页:

<?php
session_start();

if(!isset($_SESSION['username']))
{
    //User not signed in, send them to the log in page
    header('Location: Log-In.php');
}
?>

有任何想法吗?

谢谢,丹尼

4

1 回答 1

1

这只是一个猜测,但假设您只显示登录脚本的部分代码:

您不会die()在成功登录后重定向后使用,因此之后出现的任何代码以及您未在此处显示的代码都会被执行。如果您在$_SESSION那里操纵变量,那可能会导致您的问题。

为了安全起见,只需将您的代码更改为:

    if($encryptedPasswordSubmitted == mysql_result($data, $userToLogInAs, "Password"))
    {
        //Create a session variable so the user remains logged in
        $_SESSION['username'] = $usernameSubmitted;

        //User entered the correct username and password, redirect them to the website.
        header('Location: Index.php');
        die();    // this is important!
    }

看看是否能解决问题。请注意,您需要在重定向的任何地方执行此操作。

于 2012-04-12T22:11:43.640 回答