发送仍然设置AFTER标头的PHP会话变量

时间:2011-01-31 06:29:23

标签: php session header

的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中找到。即使重新启动浏览器,也会发生这种情况这是怎么回事?

4 个答案:

答案 0 :(得分:2)

编辑:Erhm。我累了。我误解了你的问题。随意忽略这篇文章

会话变量为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?; 肯定会运行