【问题标题】:Redirecting to a different URL using PHP and passing some POST variables (Parameters)使用 PHP 重定向到不同的 URL 并传递一些 POST 变量(参数)
【发布时间】:2011-12-23 16:31:56
【问题描述】:

如何在使用 PHP 传递一些 POST 参数的同时重定向到不同的页面?

【问题讨论】:

    标签: php post redirect


    【解决方案1】:

    您不能使用 POST 方法本身“重定向”,您要做的是向您计划重定向到的站点执行 POST 请求。看看来自http://php.net/manual/de/book.curl.php 的 cURL POST 示例:

    $ch = curl_init();
    
    $data = array('name' => 'Foo', 'file' => '@/home/user/test.png');
    
    curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    
    curl_exec($ch);
    

    用您的目标替换CURLOPT_URL,并在$data 数组中设置必填字段。为此,您的 PHP 需要启用 cURL 模块。

    或者,您可以在会话中存储您计划在 POST 中发送的所有数据,然后从那里读取目标。

    【讨论】:

    • 我想知道这如何与 cookie 和语言设置等客户端信息一起使用。
    • 您必须确保您重定向到的页面的域与您重定向的页面相同,否则您将无法读取会话和 cookie 数组。跨度>
    • 但是如果已经使用$_SESSION,如果我唯一需要做的就是一个简单的重定向,我为什么要自己写一个代理呢?
    • 您说得对,在阅读了您仅发送状态码的建议后,打开服务器端 POST 请求似乎很臃肿。但是您概述的问题是,某些浏览器将类型更改为 GET,这不会提供大量控制权吗?即,对于相同的数据,接收方必须同时接受 POST 和 GET 吗?编辑:在阅读了建议的 303 之后,W3C 声明它将始终在重定向后成为 GET 请求。
    • 没错,建议使用 303 是有原因的。但这有一个警告,它是 HTTP 1/1。有时您仍然会收到 HTTP 1/0 请求。
    【解决方案2】:

    您需要将 POST 参数存储在 SESSION 变量中

    【讨论】:

    • 好主意。我会用这个:)
    【解决方案3】:

    如何在使用 PHP 传递一些 POST 参数的同时重定向到不同的页面?

    这很难做到,因为重定向需要服务器和浏览器。

    您的脚本可以告诉浏览器它应该重定向。

    但是根据规范,浏览器必须得到确认才能允许将 POST 请求发送到重定向的 URL。

    但即便如此,并非所有浏览器都会通过重定向重新发送帖子数据:

    注意:当自动重定向 POST 请求后 接收 301 状态码,一些现有的 HTTP/1.0 用户代理 会错误地将其更改为 GET 请求。 (Ref)

    因此,由于这并不能始终如一地工作,而且我猜您不想让用户按下按钮来执行重定向,因此您无法仅通过重定向轻松创建您正在寻找的内容。

    但是正如 Kashif Khan 所写,您可以将提交的帖子数据存储到某个会话中,然后将用户重定向到一个新位置,您可以在该位置再次从该会话中读取。

    要在浏览器中正常工作,请使用 303 See Other 状态码进行重定向。

    【讨论】:

      猜你喜欢
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多