【问题标题】:Set custom header then redirect设置自定义标头然后重定向
【发布时间】:2015-12-29 16:06:03
【问题描述】:

我尝试制作一个 PHP 函数,

  • 设置自定义标题(“test:longstring”),
  • 使用包含自定义标头的请求重定向到外部网站

我做了什么:

public function myFunc() {
  header("test: helloWorld");
  header("Location: mysite.com");
  die();
}

重定向有效,但我在对 mysite.com 的 GET 请求中找不到测试标头,为什么?

NB我想使用header而不是url参数,因为我要发送的字符串是openssl_sign生成的签名的base64。

【问题讨论】:

  • 当您设置header("test: helloWorld"); 时,您只是将其设置为当前页面,然后您切换页面。所以它不会起作用。
  • 不可能如你所愿。通过设置位置标头,您将用户浏览器重定向到另一个网站。在这种情况下,浏览器不会保存标题。您可以尝试将 get 参数传递给位置 mysite.com?test=hellowWorld
  • 仅供参考,除了已经说过的:如果您对任何内容(请求或响应)使用自己的自定义 HTTP 标头,您应该尝试遵守约定,自定义标头未涵盖RFC 的命名应始终以前缀X- 开头,如X-My-Custom-Header: Foo
  • @CBroe 谢谢你的提示:)

标签: php


【解决方案1】:

重定向有效,但我在对 mysite.com 的 GET 请求中找不到测试标头,为什么?

因为您设置了 response 标头。

无法触发 HTTP 重定向并导致客户端添加自定义标头。

网站让浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 JavaScript 和 XMLHttpRequest 对象。由于您说您正在处理外部站点,因此您还需要确保该站点实施了 CORS 以授予您的站点权限。

【讨论】:

【解决方案2】:

我认为最好将“测试”放在会话中并从会话中获取价值。

public function myFunc() {
  $_SESSION["test"] =  "helloWorld";
  header("Location: mysite.com");
  die();
}


// mysite.com
if(isset($_SESSION['test']))
{
// Do something
}

【讨论】:

  • 问题是重定向到不同的站点。它将无法共享会话数据。此外,会话数据适用于应该在会话中持续存在的数据,但问题没有表明它应该持续超过这对特定请求的生命周期。
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2023-04-05
  • 2013-08-04
相关资源
最近更新 更多