php - session 变量不在页面之间传输

标签 php session transfer

<分区>

Possible Duplicate:
Headers already sent by PHP

我正在制作一个简单的登录页面,但是我的 $_SESSION 变量没有在页面之间传输。我在每页的开头阅读了许多关于 session_start() 的其他帖子、文件夹写入权限、session_write_close() 等,但没有一个有效。 session_write_close() 有或没有都没有区别,所以我把它留在里面了。下面的所有代码都工作正常,因为我省略了下面和上面的代码,例如 where $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 变量,以查看在非常简单的代码中发生了什么。

session_start();
print_r($_SESSION);

结果是一个空数组。 当我转到写入我的 session 的 easyphp 临时文件时,我总是会找到两个文件:包含所有正确信息的原始文件和一个没有任何信息的新文件。似乎当我调用第二个 session_start() 时,它实际上是在开始一个新 session 而不是调用当前 session 。

我尝试进行研究以提供尽可能多的信息,而不是浪费人们的时间。非常感谢任何想法。奇怪的是,这几天前还在工作,然后我开始对程序中的文件进行更深入的更改,这发生了。所以我制作了 test.php 只是为了了解更多关于传输问题的信息。

最佳答案

一旦任何数据或空格输出到浏览器,您就不能调用 session_start()

在您发布的代码中,您正在调用 echo "token: $token, token1: $token1, row[1]: $row[1], row2: $row[2] "; 在调用不会启动 session 的 session_start() 之前。

添加error_reporting(E_ALL); ini_set('display_errors', 1); 到脚本的开头,您应该会看到一条关于无法启动 session 的警告,因为输出已发送。

尝试将 session_start(); 调用移动到文件的非常开头。

关于php - session 变量不在页面之间传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378040/

相关文章:

php - 获取谷歌地图中特定区域的所有用户名或用户总数

php - 来自登录用户名的下拉菜单链接

java - Java中的gzinflate

session - 使用 ENDSESSION_CLOSEAPP 和 wParam == FALSE 对 WM_ENDSESSION 的正确响应是什么?

java - Applet jar是浏览器下载的还是JVM下载的?

rust - 所有权转移后的变异变量

php - 使用 PHP 导出 excel 时编码字符串错误

php - CodeIgniter session 库 - 潜在危险行为?

c# - 如何通过网络流 c# 接收大文件?

java - Google App Engine 为从 Java 应用程序到您的客户端的实时数据传输提供了什么?