【问题标题】:PHP - session_write_close() - Passing $_SESSION variables accross pagesPHP - session_write_close() - 跨页面传递 $_SESSION 变量
【发布时间】:2021-11-07 14:59:00
【问题描述】:

我的目标是在不打开会话的情况下将消息传递到另一个页面,因为这会干扰其他脚本。

假设我在一页上有一个表单流程:

<?php

if ( process_form() ) {

    session_start();
    $_SESSION['success'] = 'The form has been saved.';
    session_write_close();
    header( 'Location: http://www.example.com/success.php' );
    exit();
    

} else {

    // Do something

}

?>

在第二页我尝试获取 $_SESSION 变量的内容:

<?php
// success.php

var_dump( $_SESSION ); // 1

session_start();

var_dump( $_SESSION ); // 2

session_write_close();

var_dump( $_SESSION ); // 3

?>

输出是:

  1. 未定义变量:_SESSION
  1. array(1) { ["success"]=> string(24) "表单已保存。" }
  1. array(1) { ["success"]=> string(24) "表单已保存。" }

为什么不先打开会话就不能读取 _SESSION 变量?

基本上在第二页上我只想从会话中读取数据而不是将其保持打开状态,这是最好的方法吗?:

<?php
// success.php

session_start();
session_write_close();
echo $_SESSION['success'];

?>

输出是:

表单已保存。

【问题讨论】:

    标签: php session redirect


    【解决方案1】:

    一个会话在 PHP 脚本结束时被存储和关闭。在exit(); 的第一部分代码中。只有在 PHP 脚本的输出被发送到浏览器后,它才会对header(); 做出反应并加载另一个页面。会议已经结束。这意味着session_write_close();,在那段代码中没有任何用处,或者,至少,没有做你期望它做的事情。

    你的问题是:

    为什么我们不能在不打开会话的情况下读取 _SESSION 变量 第一个?

    最可能的答案是您没有启用自动会话启动功能。

    见:session.auto_start

    您可能不需要用session_write_close(); 强制关闭会话,因为这是在 PHP 完成脚本处理时完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2015-02-05
      • 2016-05-06
      • 2015-07-03
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多