Php 重定向到其他页面后检索会话_id()时出错

Php 重定向到其他页面后检索会话_id()时出错,php,session,redirect,Php,Session,Redirect,这是一个非常棘手的问题 我想使用Post/Redirect/Get模式在PHP中开发一个登录表单。包含登录表单的页面如下所示: <?php if (try_login()) { session_regenerate_id(); session_start(); header('Location: main.php'); exit(); } ?> <html> <head> <!-- etc, etc -

这是一个非常棘手的问题

我想使用Post/Redirect/Get模式在PHP中开发一个登录表单。包含登录表单的页面如下所示:

<?php
  if (try_login()) {
    session_regenerate_id();
    session_start();
    header('Location: main.php');
    exit();
  }
?>
<html>
  <head>
    <!-- etc, etc -->
  </head>
  <body>
    <form action="<?php echo htmlentities($_SESSION['PHP_SELF']); ?>" method="post">
      <!-- etc, etc--></head>
    </form>
  </body>
</html>

我希望在成功登录后被带到
main.php
并显示我的
session\u id()
。但是,当我自己测试登录表单时,我被重定向到
main.php
,但是我的
session\u id()
没有出现。我的代码有什么问题?

您需要在
main.php
中调用
session\u start()
,然后才能检索会话。

除非您使用的是
session.auto\u start
您需要使用
session\u start()显式启动会话
根据会话数据在所有页面上显示。请原谅使用了不恰当的语言,但是。。。我勒个去?我是否必须使用
session\u start()
,即使我实际上没有启动,而是在恢复会话?编程时不要假设,请阅读文档。记住HTTP是无状态的。这意味着服务器不知道您在上一页调用了什么。它只知道它有一个页面请求。因此,是的,在对会话执行任何操作之前,必须调用会话_start()。
<?php
  echo htmlentities(session_id());
?>