我正在创建一个简单的登录页面,但我的$_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
只是为了找到有关转移问题的更多信息。
答案 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 开头。