使用PHP通过HTTP Post而不是简单链接进行重定向

问题描述

|| 我有一个杂志发行商的网站,并且此站点具有指向另一个托管该杂志电子版本的站点的标准超链接。电子杂志托管站点具有每个出版物,每个出版物,身份验证方案和每个用户的owm。为了避免杂志订户必须同时登录这两个站点,双方已经就某种握手达成了一致。 重定向到杂志宿主网站时,我必须发布一个带有一些值的小型HTML表单。我的第一个障碍是杂志发布者网站是由CMS驱动的,所以我不能只用输入包围一个按钮并将其伪装成POST重定向。 到目前为止,我最干净的解决方案是创建一个新的,非公开的,小的PHP,原始杂志网站将链接到该PHP。此PHP将呈现一个小的HTML表单,该表单将立即将instelf发布到杂志托管站点,因此当杂志阅读器到达杂志托管站点时,他已经在进行身份验证     

解决方法

这可能需要在服务器端使用cURL(或带有
$context
参数的
file_get_contents
)或在客户端使用
$.post
完成。我不认为您会说服大多数浏览器提交“ 3”请求,只是因为服务器标头告诉它-安全性太差了。 (例如:如果您在价值10,000美元的电视页面上,亚马逊可能只是告诉您的浏览器单击“立即购买”按钮。) PHP示例
<?php
$opts = array(
  \'http\'=>array(
    \'method\'=>\"POST\"
    )
  );

$context = stream_context_create($opts);

$response = file_get_contents(\"<your url>\",$context);
JS示例
params = { \'test1\': \'value\' };

$.post(\'<your url>\',params,function(response)
{
    // handle response
});
    ,您可以使用页面上的标头重定向来执行此操作,但它与表单提交不同,因此,其发布到的页面将需要能够接受GET样式的表单提交,但是您应该能够此代码如下所示:
<?php
$val1 = mysql_escape_string($_POST[\"val1\"]);
$val2 = mysql_escape_string($_POST[\"val2\"]);

//Authenticate Locally here and then...

$val1 = urlencode($val1);
$val2 = urlencode($val2);
header(\"Location: http://www.emagazine.com/forminput.php?val1=$val1&val2=$val2\");
请记住,如果您在浏览器中打印任何内容,则php标头重定向将失败,这首先是打到浏览器的东西。