我正在编写一个用户登录系统,我(和其他许多人一样)对我的会话有问题。
以下是验证输入时登录脚本的指针:
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()看到了什么可疑的东西,什么都没发现。这完全是我的进步所在。谢谢!
答案 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();
位于两页顶部