在我的注册脚本中,我有:
// Save registration information into the database
// Set sessions
$_SESSION['var1'] = 'somevalue';
$_SESSION['var2'] = 'anothervalue';
header('Location: /somewhere');
exit();
然后在我的登录脚本上我有:
// Check if user provided correct login credentials
if (correct) {
$_SESSION['var1'] = 'somevalue';
$_SESSION['var2'] = 'anothervalue';
}
header('Location: /somewhere');
exit();
发生的事情是会话变量在注册脚本中的头重定向之后丢失,但是在登录脚本中重定向之后它们被保留了。
我在两个页面都检查了session_id()
并且它们具有相同的值,在每个页面的顶部都包含session_start()
,并且基本上尝试了在Stackoverflow上发现的这个常见问题的解决方案但是似乎没什么好看的工作。
我开始怀疑它是否与我的服务器配置而不是我的代码有关。
答案 0 :(得分:1)
您是在www.example.com和example.com之间重定向吗?因为这是两个不同的领域。
答案 1 :(得分:1)
有关session_write_close的手册页有来自此类或类似问题的很多人的评论。有人说通过在“header('location”行)之前调用session_write_close来修复它。
这篇文章:http://us.php.net/manual/en/function.session-write-close.php#86791
他说这对他不起作用,但调用session_regenerate_id()确实有效。 (这会更改会话cookie,并强制php发送cookie。
可能需要再次发送cookie。我读过一些人说有些浏览器在重定向后不发送cookie,除了他们刚刚在原始网址上获得的cookie。
答案 2 :(得分:0)
我意识到这是一个旧线程,但我只是将一个站点移动到一个带有证书的新专用IP,并且会话不会传递一个标题(“location:”)重定向...在旧位置它们是过得很好。唯一有用的是添加session_regenerate_id(true);在重定向之前。我还好奇为什么?那里有什么想法吗?
答案 3 :(得分:0)
我遇到了同样的问题,之后我尝试了一切:
exit();
session_write_close();
$_SESSION['user'] = $user;
或session_register("user");
session_start();
最后......我发现在我的配置中,会话保存路径的文件夹不可写。
一旦设置为可写并设置了正确的用户,一切都像魅力一样。
要查找保存路径,请查看 phpinfo() session.save_path
下的内容答案 4 :(得分:-3)
为什么要使用exit()?标题(“location:/ somewhere”);将阻止脚本的其余部分被执行。