Php重定向到带有POST数据的另一个页面

时间:2012-09-27 10:22:12

标签: php post

在我的php应用程序中,我只需要将用户重定向到具有一些POST数据的特定URL(第三方)即可完成其服务。

数据应安全地传递给该Url(因为它们是该第三方系统的登录凭据)。

我尝试使用cURL执行此操作,但它不会重定向到该特定页面。如果我发布带有设置值的隐藏字段的表单,它工作正常。但是,任何人都可以通过浏览器中的“查看页面源”选项轻松查看发布的数据。

我正在寻找一段时间,但仍然没有运气。如果有人能指导我会非常感激。提前谢谢...... !!!!

编辑

我无法使用会话,因为这是第三方网址,它要求发布登录凭据以进入该页面。

breif的功能,

我要做的是所有用户信用都存储在我的系统中 当用户按下按钮时,它应该将他重定向到该URL,并且应该POST该凭证以进入该外部第三方页面。当用户按下按钮时,他不必通过文本框输入信号。这就是为什么我甚至不能硬编码隐藏字段作为其可见,如果去浏览器中的“查看页面源”选项。

----------

我正在寻找一种方法(在php中),它会在POST一些数据时将用户重定向到url。它可以通过创建一个FORM并具有textinputs(文本框)来完成,以允许用户输入帖子信息并提交。

但在我的情况下,我不能让用户输入文本框的POST信息并提交。当用户单击按钮时,它必须POST数据并重定向到指定的URL。尝试通过cURL执行此操作,但它不会将用户重定向到URI。此外,如果我添加了hiddenFields硬编码POST值,则它不受保护,因为任何人都可以通过浏览器“查看页面源”选项查看POST信息。

5 个答案:

答案 0 :(得分:2)

只需创建一个字段数等于凭据的表单。即如果你想发送用户名和密码,请这样做,

<form id="uform" action="" method="post">
        <input type="text" name="uname" id="uname" style="opacity:0;" />
        <input type="text" name="pass" id="pass" style="opacity:0;" />
    </form>

在file.php中,

<php
var $_uname = "Required username";
var $_pass = "Required password";
echo $_uname.",".$_pass;
?>

然后在您的javascript中,在按钮单击事件中,获取此表单并设置输入字段的值。然后提交表格,

<script>
var ajax = new XMLHttpRequest();
ajax.open("GET","file.php",true);
ajax.send();

ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
    var dt = ajax.responseText;
    dtsp = dt.split(",");
    var frm = document.getElementById("uform");
    var inp1 = document.getElementById("uname");
    var inp2 = document.getElementById("pass");
    inp1.value = dtsp[0];
    inp2.value = dtsp[1];
    frm.action = 'Url of the site to redirect to';
    frm.submit();
    }
}

    </script>

然后在用户被重定向的第二个站点中,如果要获取数据,请执行此操作,

<php
$uname = $_POST["uname"];

$pass = $_POST["pass"];
?>

你去吧。您将安全地将数据从一个站点传输到另一个站点。

答案 1 :(得分:1)

如果您需要将与用户关联的数据发送给第三方而不将该数据提供给用户,那么您需要按照以下方式使用流程:

  • 使用服务器端代码发送数据
  • 获取令牌以识别该组数据(您可以将其包含在最初发送的数据中,或者从第三方网站的响应中获取)
  • 将用户重定向到第三方网站,并在网址中包含令牌

显然,这需要第三方网站的合作。

在问题中添加评论后更新:

  

这是第三方网址,它要求发布登录凭据以进入该网页。因此会话在这里不起作用。

听起来您正试图让用户在不向他们提供凭据的情况下登录。那是不可能的。

答案 2 :(得分:1)

function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

(你也可以使用ajax) ;)

答案 3 :(得分:1)

您可以通过session

发送

在第一站点执行此操作,

<?php
        session_start(); 
        $_dt = 'data to send';
        $_SESSION['dt'] = $_dt;
    ?>

第二步,

<?php
     session_start(); 
        $_dt = $_SESSION['dt']
?>

数据将在$_dt

答案 4 :(得分:0)

您是否考虑过:

a)使用javascript或java app加密它 - 这就是我的银行用来做它的方式..

b)将变量发布回自身,加密它们,假设它加密,然后将页面反弹到带有加密变量的新页面。

加密的唯一问题是你需要能够解密它才能将它提供给第三方应用,除非他们接受特定的编码,在这种情况下,如果你可以解密它,其他人就会知道如何。