的index.php
<?php
session_start();
header("Location: somewhere.php");
?>
<html>
<head></head>
<body>
<?php $_SESSION['foo'] = 'bar'; ?>
</body>
</html>
somewhere.php
<?php
session_start();
echo $_SESSION['foo'];
?>
我在index.php
中的标题调用后在正文中设置了一个会话变量。然后它在somewhere.php
中找到。即使重新启动浏览器,也会发生这种情况这是怎么回事?
答案 0 :(得分:2)
会话变量为superglobals。在客户端的浏览器中使用会话ID设置cookie。无论你在$ _SESSION中设置什么,都会存储在链接到客户端会话ID的服务器上。当用户浏览网页时,PHP会自动使用之前的任何数据填充$ _SESSION,直到会话过期。
答案 1 :(得分:2)
好吧,为什么不呢?
// starts session, sets cookie with session id
session_start();
// outputs Location header
header("Location: somewhere.php");
// rest of code keeps executing!
// sets session value foo
$_SESSION['foo'] = 'bar';
仅仅因为您输出Location
标题并不意味着脚本的其余部分不会执行。
会话值已设置并保存在服务器上,这与是否已发送标头完全无关。需要发送到客户端的唯一标头是包含会话ID的cookie,这可以在填充服务器内存中的会话值之前或之后发生。
答案 2 :(得分:1)
试试这个,看看你是否得到了相同的结果:
<?php
session_start();
unset($_SESSION['foo']);
header("Location: somewhere.php");
?>
编辑:
<?php
session_start();
unset($_SESSION['foo']);
header("Location: somewhere.php");
exit;//maybe this will stop the script from setting that session
?>
答案 3 :(得分:0)
当你编译第4行的rached“ header(”Location:somewhere.php“); ”时
你的控制权转到 somewhere.php
你可以用它。
的index.php
&LT; ?PHP的
在session_start();
$ _ SESSION [“foo”] =“bar”;
header(“Location:somewhere.php”);
&GT?; 肯定会运行