php - PHP - session_write_close() - 跨页面传递 $_SESSION 变量
问题描述
我的目标是在不打开会话的情况下将消息传递到另一个页面,因为这会干扰其他脚本。
假设我在一页上有一个表单流程:
<?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
?>
输出是:
- 未定义的变量:_SESSION
- array(1) { ["success"]=> string(24) "表单已保存。" }
- array(1) { ["success"]=> string(24) "表单已保存。" }
为什么不先打开会话就不能读取 _SESSION 变量?
基本上在第二页上,我只想从会话中读取数据而不是将其打开,这是最好的方法吗?:
<?php
// success.php
session_start();
session_write_close();
echo $_SESSION['success'];
?>
输出是:
表格已保存。
解决方案
当 PHP 脚本结束时,会话被存储并关闭。在您的第一部分代码中,位于exit();
. 只有在 PHP 脚本的输出被发送到浏览器后,它才会响应header();
并加载另一个页面。会议已经结束。这意味着session_write_close();
,在那段代码中,没有任何用途,或者至少没有按照您的预期去做。
你的问题是:
为什么不先打开会话就不能读取 _SESSION 变量?
最可能的答案是您没有启用自动会话启动功能。
而且您可能不需要强制关闭会话,session_write_close();
因为这是在 PHP 完成脚本处理时完成的。
推荐阅读
- php - SQL/PHP 获取所有博客,但仅来自我的朋友
- merge - 如何更新或插入 DB2 中的同一张表
- php - 使用 jsPDF 和 PHP 将生成的 PDF 文件保存在服务器上
- python - 无法选择列表中的对象并将其删除
- java - Java 动态 Web 项目 index.html 在浏览器中打开时不显示任何内容
- c - FFMPEG remux 样本不写入文件
- php - PHP 日历的问题
- reactjs - 使用 React + Material UI Card Expander 扩展单个卡片
- python - Python - 计算一个条件后开始的值的平均值(例如,在另一列中的第一个非零之后)
- compilation - 如何在 Fedora 上为 openwrt 编译和运行二进制文件?