2012-09-27 149 views
0

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

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

我试图用cURL来做到这一点,但它没有做任何重定向到特定的页面。它工作正常,如果我发布带有设置值的隐藏字段的表单。但任何人都可以通过查看浏览器中的“查看页面源代码”选项来查看发布的数据easilly。

我正在寻找长时间的懒散,但仍然没有运气。如果有人能指导我会很感激。提前致谢...!!!!

编辑

,因为这是一个第三方的网址,并要求张贴的登录凭证进入该页面无法使用会话。

功能在breif,

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

----------

只要我在寻找一种方法(在PHP),这将同时发送一些数据将用户重定向到URL。它可以简单地通过创建一个FORM和具有文本输入(Textboxes)来允许用户输入发布信息并提交。

但在我的情况下,我不能让用户输入文本框的POST信息并提交。当用户单击按钮时,它必须POST数据并重定向到指定的URL。试图通过cURL来做到这一点,但它不会将用户重定向到URI。此外,如果我添加hiddenFields硬编码POST值,它不会被保护,因为任何人都可以通过浏览器“View Page Source”选项查看POST信息。

+0

你可以在会话中做到这一点。或者如果你真的需要发布数据。那么你必须创建窗体并在表单上提交调用PHP。然后你可以访问其他php文件中的数据! – MJQ

+0

jQuery post方法获取响应并重定向 –

+0

@MJQ,这是第三方url,它要求发布登录凭证以进入该页面。因此会议不会在这里工作。 – JibW

回答

0

你有没有考虑两种:

a)用JavaScript或Java应用程序对其进行加密 - 这是我的银行怎么用来做什么的..

B)发布的变量回其自身,它们加密,假设它被加密,然后将页面反弹到具有加密变量的新页面上。

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

1

如果您需要发送与用户关联的第三方数据,而这些数据给用户,那么你需要使用过程沿着这些线路:

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

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

更新后的注释中加入了一个问题:

这是一个第三方的网址,并要求张贴的登录凭证进入该页面。因此会议不会在这里工作。

这听起来像你试图让用户登录你,而不给他们的凭据。那是不可能的。

+0

嗨昆汀,谢谢。我的意思是,如果我只是将用户重定向到没有正确信息(POSTING)的网址,则不允许我进入该特定页面。只有发布的信息是正确的,它才显示页面内容(基本上不是登录)。一旦我们在该页面中输入了一些细节,它就会将回复发回给我的页面。 – JibW

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) ;)

1

您可以通过session发送,

在第一个网站做到这一点,

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

在第二个做到这一点,

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

数据将在$_dt

+2

这是第三方网站。它将无法访问相同的会话数据库! – Quentin

+0

好的。然后应该使用邮政数据。用表格。 – MJQ

+0

@MJQ,我更新了问题。由于用户凭证存储在系统中,并且在用户需要重定向到该页面时,他不必通过文本框输入它们。 – JibW

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

这里ü去。您将安全地将数据从一个站点传输到另一个站点。

+0

HI MJQ感谢您的建议。但是,由于JavaScript代码在查看页面源代码时对任何人都是可见的,因此安全性在这里可能是一个问题。难道我们在php中只有一个简单的方法来重定向POST数据吗? – JibW

+0

不,您必须提交表单才能发布数据。并在php中赋值给变量,如果你真的想要硬编码,就给它们回显。然后在javascript中分配这些值以形成变量。这样他们将被隐藏起来。 – MJQ

+0

想要它的代码? – MJQ

相关问题