“header()” php 函数是不是取消设置全局变量?

Posted

技术标签:

【中文标题】“header()” php 函数是不是取消设置全局变量?【英文标题】:Does "header()" php function unset global variables?“header()” php 函数是否取消设置全局变量? 【发布时间】:2011-11-08 16:13:05 【问题描述】:

我正在开发一个包含 html 表单的 php 脚本。

如果并非所有字段都以正确的方式填写,脚本将发出错误信号并重定向回同一页面,其中 header 函数使用 get 方法将错误变量设置为 yes:

header("Location: registration_page.php?error_empty=yes");

我的脚本有一个错误处理部分,它突出显示包含错误的字段,但我想保持正确填写字段的值。

我正在实现这个功能,正如我在另一个问题中发现的那样:

How can I keep a value in a text input after a submit occurs?

但问题是,当页面重新打开时,表单将不包含旧值。

我的问题是:有人知道标头函数是否取消设置 $_REQUEST 数组中的全局变量吗?

你知道我可以采用什么样的解决方案吗?也许是会话?

提前致谢,

马特奥!

【问题讨论】:

【参考方案1】:

$_COOKIES 将保持不变,但 $_POST$_GET 将被销毁,因为客户端正在移动到新页面。如果需要保留,则必须先将它们存储到$_SESSION,然后再调用重定向。

session_start();
$_SESSION['last_post'] = $_POST;
header("Location: http://example.com");
exit();

// On the redirected page, use the stored POST values and unset them in $_SESSION
session_start();
if (empty($_POST) && isset($_SESSION['last_post'])) 
  $post = $_SESSION['last_post'];
  unset($_SESSION['last_post']);

else $post = $_POST;

【讨论】:

会话开始后我应该什么时候销毁它?什么时候字段都填写成功了? @Matteo session_destroy() 在脚本执行完成时被隐式调用。除非您有理由在脚本完成之前关闭会话,否则您不需要调用它。 session_destroy()删除会话变量。我只是断开当前脚本与会话的连接。 @Matteo 请参阅上面关于在使用后取消设置 $_SESSION 存储的帖子【参考方案2】:

有人知道标头函数是否取消设置 $_REQUEST 数组中的全局变量吗?

不,它没有。 Cookie ($_COOKIE) 将保留。

显然$_GET 将包含您在重定向中的任何内容(例如:$_GET['error_empty'] = 'yes') and$_POST` 将是空的,因为您没有发布。

所以$_REQUEST 将是$_COOKIE 和您设置的新$_GET 参数的组合。


无论如何,您可能不应该使用$_REQUEST。准确指定您希望请求参数的位置...

【讨论】:

【参考方案3】:

它没有,但它确实提出了一个新请求。新请求意味着新的$_REQUEST 不一定包含所有旧数据。 $_COOKIE 仍然存在,但 $_GET$_POST 将是新的意思,$_REQUEST 将反映这一点。 ($_FILES 也将为空,当它不在 `$_REQUEST 中时,它是另一个用户提供的值将被重置)。

如果您想恢复表单,您需要将所有变量放在标题中的url中,或者使用$_SESSIONsetcookie然后从$_GET$_SESSION$_COOKIES.

【讨论】:

所以旧值将无法再访问?这就是为什么如果使用命令 结果将为空? $_FILES 很久以前就从 $_REQUEST 中删除了。 没错。因为$_REQUEST依赖于浏览器的输入,如果浏览器发出新的请求,那么$_REQUEST就会被清空。 @Null 我的措辞不好。固定。

以上是关于“header()” php 函数是不是取消设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 会话控制 cookie与session 全解析

取消设置 php 参考

PHP 使用header函数设置HTTP头的示例解析 表头

PHP函数中使用的变量会在函数执行后自动取消设置吗?

PHP header()函数

网页页面编码