【问题标题】:PHP session variables wont workPHP会话变量不起作用
【发布时间】:2012-08-17 07:36:48
【问题描述】:

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

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

任何帮助:)? - 大卫


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

 <?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>

【问题讨论】:

  • 我很确定您的if(!$count == 1) 是错误的。更别说看起来别扭了。您是否要检查 $count 是否等于 1?或者您是否要检查 $count 是否大于 1?此外,这很容易出错,因为您应该检查该值是否等于 1。现在,如果该值大于 1,您的陈述将是正确的。如果您有 2 个用户具有相同的用户名/电子邮件地址怎么办。跨度>
  • Headers already sent by PHP 的可能重复项

标签: php session session-variables


【解决方案1】:

session_start() 应位于文档的最顶部,header() 应仅在网站上发生任何输出之前执行。

【讨论】:

  • 顺便说一句,它们是同一个问题。 session_start 需要发送 headers 并且 headers 需要在输出之前。
【解决方案2】:

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

<html>
...

是输出。

也一样

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

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

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

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

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

我会检查它是否已设置

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

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2015-09-30
    • 2014-05-16
    相关资源
    最近更新 更多