【问题标题】:Php redirect to another page with POST dataphp重定向到另一个带有POST数据的页面
【发布时间】:2012-09-19 02:35:24
【问题描述】:

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

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

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

我正在寻找一个sloution很长时间,但仍然没有运气。如果有人可以指导我将非常感激。提前谢谢...!!!!

编辑

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

简单的功能,

我要做的就是将所有用户凭据都存储在我的系统中。
当用户按下一个按钮时,它应该将他重定向到该 url,并应该发布该凭据以进入该外部 3rd 方页面。当用户按下按钮时,他不必通过文本框输入凭据。这就是为什么如果转到浏览器中的“查看页面源代码”选项,我什至无法将隐藏字段硬编码为可见。

---------

我只是在寻找一种方法(在 php 中),它会在发布一些数据时将用户重定向到一个 url。只需创建一个 FORM 并使用 textinputs(Textboxes) 来允许用户输入帖子信息并提交即可。

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

【问题讨论】:

  • 您可以在会话中执行此操作。或者如果你真的需要发布数据。然后你必须创建表单并在表单提交时调用 php.ini。然后你可以访问其他php文件中的数据!
  • jQuery post 方法获取响应和重定向
  • @MJQ,这是一个第三方网址,它要求发布登录凭据以进入该页面。因此会话不会在这里工作。
  • 那就用post来做吧!做一个表格。并在提交后发布数据,然后在 $_POST 中获取数据。
  • 自己从未尝试过,但这似乎是一篇有用的文章:How to submit a form using PHP

标签: php post


【解决方案1】:

您是否考虑过:

a) 使用 javascript 或 java 应用程序对其进行加密 - 这是我的银行过去的做法..

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    听起来您正试图让用户以您的身份登录而不给他们凭据。这是不可能的。

    【讨论】:

    • 嗨昆汀,谢谢。我的意思是,如果我只是在没有正确信息(POSTING)的情况下将用户重定向到该网址,它不允许我进入该特定页面。只有发布的信息是正确的,它才会显示页面内容(基本上不是登录)。一旦我们在该页面中输入了一些详细信息,它就会将回复发回我的页面。
    【解决方案3】:
    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) ;)

    【讨论】:

      【解决方案4】:

      您可以通过session发送,

      在第一个站点执行此操作,

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

      第二次这样做,

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

      数据将位于$_dt

      【讨论】:

      • 这是一个第三方网站。它将无法访问相同的会话数据库!
      • 好的。然后应该使用 Post 数据。有表格。
      • @MJQ,我更新了问题。由于用户凭据存储在系统中,当用户需要重定向到该页面时,他不必通过文本框输入它们。
      • 整个场景是怎样的?你如何重定向?用户是否单击按钮等进行重定向?
      • 第 3 方 ppl 提供了访问其网页所需的凭据。当我们需要访问该页面时,我们必须发布该信息。否则访问受限......所以在我的 php 应用程序中,我已经存储了这些信息,并且 LoggedIn 用户有一个按钮可以单击以将他重定向到该页面。那时我必须将信息(存储在我的应用程序中的数据库中)发布到 URL 并将他重定向到那里。
      【解决方案5】:

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

      <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"];
      ?>
      

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

      【讨论】:

      • HI MJQ 感谢您的建议。但是,由于在查看页面源代码时任何人都可以看到 javascript 代码,因此在安全方面这可能是一个问题。难道我们在 php 中没有直接的方式来在携带 POST 数据的同时进行重定向吗?
      • 不,您必须提交表单才能发布数据。并在 php 中为变量赋值并回显它们,如果你真的想对它们进行硬编码。然后在 javascript 中分配这些值以形成变量。这样它们就会被隐藏起来。
      • 嗨 MJQ。如果可以请...由于这是第 3 方 API,我什至无法寻求会话解决方案。必须使用 POST 数据将用户重定向到那里,而不要求他输入它们。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多