PHP会话变量不起作用

时间:2012-08-21 21:57:05

标签: php session session-variables

我是一名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>

2 个答案:

答案 0 :(得分:4)

session_start()应该位于文档的最顶层,header()只应在网站上输出之前执行。

答案 1 :(得分:0)

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

之前调用session_start
<html>
...
输出

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

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

之上 带标题的

('Location ...')它是相同的 - 应该在输出之前

不过,我不会直接去

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

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

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