在session_start();不起作用?

时间:2013-07-18 22:19:21

标签: php oop mysqli

我已经解决了我的最后一个问题,但现在又有了另一个问题。 我认为,我已经在google和stackoverflow上搜索了好几个小时了。但我无法让它发挥作用。

当我登录时,使用此:

<?php
            if(isset($_POST['submit'])) {
                $username = $mysqli->real_escape_string($_POST['username']);
                $password = $mysqli->real_escape_string(md5($_POST['password']));

                $checkUser = "SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";
                $checkUserResult = $mysqli->query($checkUser);

                if($checkUserResult->num_rows > 0) {
                    $userRow = $checkUserResult->fetch_assoc($checkUserResult);

                    $dbid = $userRow['id'];
                    $dbuser = $userRow['username'];

                    $_SESSION['id'] = $dbid;
                    $_SESSION['username'] = $dbuser;

                    header("location: me.php");
                } else {
                    echo "<div class='errorField'>Anv&auml;ndarnamnet och/eller l&ouml;senordet &auml;r fel!</div>";
                }
            }
        ?>

它将我重定向到me.php,这是代码:

<?php
include "core/global.php";
echo (headers_sent())?'sent':'not sent';
session_start();
$id = $_SESSION['id'];
$username = $_SESSION['username'];

if(!isset($_SESSION['id'])) { header("location: index.php"); } ?>

然后它将我重定向回Index.php(会话原因)并且如果我尝试使用

echo (headers_sent())?'sent':'not sent';

它说“没有发送”

会话不起作用......出于某些原因我不知道。 我的朋友,是一个OOP“专业人士”甚至无法解决这个问题......所以,请帮助我!

感谢。

PS。登录页面上的session_start()位于页面顶部: 的 http://prntscr.com/1g7ohh

2 个答案:

答案 0 :(得分:2)

me.php中的这一行...

echo (headers_sent())?'sent':'not sent';

正在破坏你的session_start电话。

通过输出文本,您将强制发送标题。

替换为

if (headers_sent()) die ("Headers have already been sent");

这样,您在测试时不会发送标头以查看标头是否已发送:)

答案 1 :(得分:0)

在您的登录示例中,您似乎没有开始会话。

session_start();添加到文件顶部,除非您没有向我们展示其余代码。请记住,如果您想使用它,您始终需要启动会话。