$ _SESSION值不持有!

时间:2011-02-24 09:58:31

标签: php session login

我正在编写一个用户登录系统,我(和其他许多人一样)对我的会话有问题。

以下是验证输入时登录脚本的指针:

session_start();
$_SESSION['id']=$id;
header('location: memberhome.php');

这是memberhome.php上的第一件事:

<?php
session_start();
$id=$_SESSION['id'];
?>

后来在memberhome.php:

You are logged in as: <?php echo $id; ?>

问题是$ _SESSION ['id']显然是空的,因此echo $ id不会打印任何内容。

替代方案也不起作用:

//removed session_start and $_SESSION bit from the top
You are logged in as: <?php session_start(); echo $_SESSION['id']; ?>

现在,这是奇怪的部分。这种方法有效:

You are logged in as: <?php echo session_start();$_SESSION['id']; ?>

您可以看到session_start()在回显之后移动。当页面从登录脚本加载时,这种方法有效。但是,刷新后,它不再起作用。

我尝试了很多替代方案,花了几个小时在以前的问题中寻找答案。我还看了我的phpinfo()看到了什么可疑的东西,什么都没发现。这完全是我的进步所在。谢谢!

5 个答案:

答案 0 :(得分:1)

首先,请启用调试:

error_reporting(E_ALL);
ini_set('display_errors', '1');

其次,session_start()需要位于页面顶部。所以你写的那行;

You are logged in as: <?php echo session_start();$_SESSION['id']; ?>

永远不会奏效。

在任何HTML等之前,以下行必须位于页面顶部。

<?php
session_start();
$id=$_SESSION['id'];
?>

答案 1 :(得分:0)

你试过了吗?

print_r($_SESSION);

检查会话的内容?

答案 2 :(得分:0)

确保在您在页面上输出任何内容之前调用session_start()。标准的基于cookie的会话需要交换一些标题信息,这必须在发送任何内容之前完成。

答案 3 :(得分:0)

你最有可能遇到输出缓冲,这就是它有时可以工作的原因,有时则不然。一般来说,在生成任何输出之前坚持开始会话,你会发现你的代码效果更好。

答案 4 :(得分:0)

使用

  

ob_start(); @session_start();

位于两页顶部