【发布时间】:2011-12-23 16:31:56
【问题描述】:
如何在使用 PHP 传递一些 POST 参数的同时重定向到不同的页面?
【问题讨论】:
如何在使用 PHP 传递一些 POST 参数的同时重定向到不同的页面?
【问题讨论】:
您不能使用 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 中发送的所有数据,然后从那里读取目标。
【讨论】:
$_SESSION,如果我唯一需要做的就是一个简单的重定向,我为什么要自己写一个代理呢?
您需要将 POST 参数存储在 SESSION 变量中
【讨论】:
如何在使用 PHP 传递一些 POST 参数的同时重定向到不同的页面?
这很难做到,因为重定向需要服务器和浏览器。
您的脚本可以告诉浏览器它应该重定向。
但是根据规范,浏览器必须得到确认才能允许将 POST 请求发送到重定向的 URL。
但即便如此,并非所有浏览器都会通过重定向重新发送帖子数据:
注意:当自动重定向 POST 请求后 接收 301 状态码,一些现有的 HTTP/1.0 用户代理 会错误地将其更改为 GET 请求。 (Ref)
因此,由于这并不能始终如一地工作,而且我猜您不想让用户按下按钮来执行重定向,因此您无法仅通过重定向轻松创建您正在寻找的内容。
但是正如 Kashif Khan 所写,您可以将提交的帖子数据存储到某个会话中,然后将用户重定向到一个新位置,您可以在该位置再次从该会话中读取。
要在浏览器中正常工作,请使用 303 See Other 状态码进行重定向。
【讨论】: