会话变量不在页面之间传输

时间:2012-07-07 19:32:18

标签: php session transfer

  

可能重复:
  Headers already sent by PHP

我正在创建一个简单的登录页面,但我的$_SESSION变量不在页面之间传输。我在每个页面的开头读了很多关于session_start()的帖子,写了文件夹,session_write_close()等等,但没有一个有用。 session_write_close()没有区别,所以我只是把它留下来。下面的所有代码都可以正常工作,因为我遗漏了下面和上面的代码,例如$login_fail来自哪里。

目前我设置$_SESSION变量,如下面的代码所示:

if($login_fail == "")
{
    $query = "SELECT first_name, last_name, email_address,password FROM user_info WHERE     email_address = '$email_address' AND password = '$password'";
    $result = mysql_query($query);

    if(!$result) die ("Database access : " .mysql_error());
    elseif (mysql_num_rows($result))
    {
        $row = mysql_fetch_row($result);
        $token = "$email_address";
        $token1 = "$password";
        echo "token: $token, token1: $token1, row[1]: $row[1], row2: $row[2] </ br>";
        if($token == $row[2] && $token1 == $row[3]) 
        {
            session_start();
            $_SESSION['first_name'] = $row[0];
            $_SESSION['last_name'] = $row[1];
            $_SESSION['email_address'] = $row[2];
            $_SESSION['password'] = $row[3];
            $_SESSION['check'] = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
            //print_r($_SESSION);
            session_write_close();
            header("Location: http://127.0.0.1/websiteproject/test.php"); 
        }
        else die("Invalid username/password combination");       
    }
}
else
{
    echo "Login failed. Please try again.";
}

我完成了print_r($_SESSION)并打印了所有正确的信息。

然后在我的test.php中再次调用会话变量,看看真正简单的代码会发生什么。

session_start();
print_r($_SESSION);

结果是一个空数组。 当我转到我编写会话的easyphp临时文件时,我总能找到两个文件:原始文件包含所有正确信息,另一个文件没有信息。似乎当我打电话给第二个session_start()时,它实际上是在开始一个新的会话而不是回忆当前的会话。

我尝试做我的研究,尽可能多地提供信息而不是腰部人的时间。任何想法都非常感谢。奇怪的是,这是几天前的工作,然后我开始更深入到程序中的文件,这发生了。所以我让test.php只是为了找到有关转移问题的更多信息。

1 个答案:

答案 0 :(得分:6)

一旦将任何数据或空格输出到浏览器,就无法调用session_start()

在您发布的代码中,您在致电echo "token: $token, token1: $token1, row[1]: $row[1], row2: $row[2] ";之前致电session_start(),而error_reporting(E_ALL); ini_set('display_errors', 1);将无法启动会话。

session_start();添加到脚本的开头,您会看到一条关于无法启动会话的警告,因为已经发送了输出。

尝试将{{1}}调用移至该文件的 very 开头。