-5

我是一名 PHP 学习者,我在 PHP 会话方面遇到了一些问题。

我正在尝试做一个简单的登录测试,但是当我指向另一个页面时,似乎会话变量不会跟随。两个重要文件:

检查登录:

 <html>
<head>
    <title>
        <?php
            session_start();
        ?>
    </title>
</head>
<body>
    <?php

        $connection = mysql_connect("localhost", "root", "root");
        if(!connection)
        {
            die("could not connect to the database");
        }
        mysql_selectdb("phplogin", $connection) or die ("MySQL error i valg af database: " .mysql_error());
        $query = "Select * from users where username='".$_POST['username']."' AND password = '".$_POST['userpass']."'";
        $result = mysql_query($query);
        $count = mysql_num_rows($result);
        if($count==1){
            $_SESSION['loggedIn'] = "true";
            echo "The variable: ".$_SESSION['loggedIn'];
            header("Location: loggedinPage.php");
            exit;
        }
        if(!$count == 1){
            header("Location:Login.php");
            exit;
        }
    ?>
</body>

和访问页面:

 <html>
<head>
    <title>
        <?php
            session_start();
        ?>
    </title>
</head>
<body>
    <?php
        if($_SESSION['loggedIn'] != "true"){
            echo "You are NOT logged in";
            echo $_SESSION['loggedIn'];
            exit;
        }
            echo $_SESSION['loggedIn'];
            echo "You are logged in";
    ?>
</body>

即使您提供了正确的用户名和密码,当被引导到新页面时,它仍然表示您没有登录。另一件事是“标题(位置:等)”,这不起作用,我必须手动重定向。

任何帮助:)?- 大卫


谢谢,我现在可以登录了,但是重定向仍然不起作用?我的文件现在看起来像这样:

 <?php
    session_start();
    ?>
    <?php

        $connection = mysql_connect("localhost", "root", "root");
        if(!connection)
        {
            die();
        }
        mysql_selectdb("phplogin", $connection) or die ("MySQL error i valg af database: " .mysql_error());
        $query = "Select * from users where username='".$_POST['username']."' AND password = '".$_POST['userpass']."'";
        $result = mysql_query($query);
        $count = mysql_num_rows($result);
        if($count==1){
            $_SESSION['loggedIn'] = "true";
            header("Location: loggedinPage.php");
        }
        if(!$count == 1){
            header("Location:Login.php");
        }
    ?>

<head>
    <title>

    </title>
</head>
<body>

</body>

4

2 回答 2

3

session_start()应该在文档的最顶部,并且header()只能在网站上发生任何输出之前执行。

于 2012-08-21T21:59:35.497 回答
0

您应该只在输出数据之前打开会话或更改其内容。session_start 应该在任何输出之前调用,并且

<html>
...

是输出。

也一样

$_SESSION['loggedIn'] = "true";

将所有与登录相关的检查和启动放在任何 html 之上

与 header('Location...') 相同 - 应该在输出之前

顺便说一句,我不会直接去

if($_SESSION['loggedIn'] != "true"){ ...

相反,我会检查它是否已设置

if(!isset($_SESSION['loggedIn']) || $_SESSION['loggedIn'] != "true"){ ...
于 2012-08-21T22:03:17.653 回答