3

我正在尝试在 PHP 中的两个站点之间传输一个大型数组。我是两者的管理员。该数组是在一个站点上创建的,创建后我希望自动将用户重定向到另一个站点,并传递处理后的数组。

我不能使用 SESSION 超全局,因为它仅限于特定域。GET 不适合,因为数组太长。我不确定 POST 是否合适,以及是否有办法自动发送数据而不强制用户单击按钮并提交一些表单。我知道 javascript 可以用于此,但更喜欢拥有更强大的东西。

我对 PHP 比较陌生,很想听听其他执行此操作的方法。谢谢!

4

10 回答 10

4

最简单的方法是使用 HTTP 库(如 cURL 和 setup)并向其他站点发送 POST 请求。还包括用户 IP 地址将允许您关联发布的数据。如果没有 JavaScript,您将无法使用 POST 数据重定向用户。

对于上述方法,您可能需要注意的一件事是,根据它的实现方式,用户可能会在数据到达之前到达。

HTTP 规范中定义的 POST 没有限制,但您可能会遇到在其他服务器上处理它的问题(取决于您所说的大),具体取决于 php 配置。(我相信 POST 限制默认设置为 8MB)

于 2009-12-03T18:26:58.910 回答
2

通过cURL 函数发送 HTTP POST 请求,并将serialize() ed 数组添加到请求正文中。

于 2009-12-03T18:27:34.653 回答
2

我会做这样的事情:

  • 在服务器 A 上生成令牌(例如 sha1(timestamp + session id + random()))
  • 使用 cURL 将序列化数组发布到服务器 B,传递您生成的令牌
  • 在服务器 B 上,将序列化的数据和令牌存储在数据库表中 -字段:令牌 (CHAR)、数据 (BLOB)
  • 将用户重定向到http://ServerB/?data_token=[TOKEN GENERATED IN STEP 1]
  • 服务器 B 从 db 中获取与令牌关联的数据,删除 db 条目,并将数组存储在新的用户会话中。
于 2009-12-03T18:37:37.353 回答
1

好吧,如果他们都在同一台服务器上,你可以让一个劫持另一个会话。我之前用它跳转到安全服务器,在第一台主机上使用 session_id() 函数获取会话,然后在第二台主机上使用相同的函数设置它。

http://www.php.net/manual/en/function.session-id.php

于 2009-12-03T18:26:21.877 回答
1

我建议在创建“数组”后将它与一个 ID 关联(​​并存储在某处),然后使用此 ID 重定向到另一个。从站点 2 使用 ID,您可以调用站点 1 上的页面,该页面返回“数组”

于 2009-12-03T18:27:21.767 回答
1

你的问题:

数组(ar)服务器(a)发送到服务器(b)

我的解决方案:

  1. Server(a)Server(b )生成一个唯一的 url(url) ,其中包含使用 json_encode(ar) 在例如 json 中编码的Array( ar)。这个Array(ar)应该使用例如 mysql 或只是一个简单的文本文件存储在url中。

    $uid = md5(uniqid(mt_rand(), true)); // to generate unique id
    
  2. Server(a)将浏览器重定向到同样包含 $uid的Server(b)

    $url = "http://server-b/page"; // url to page
    header('Location: $url?uid=$uid');
    
  3. Server(b)从Server(a)上的url获取内容并将内容解码回Array(ar)

    $uid = $_GET['uid']; // uid
    $url_server_a = "http://server-a/webservice?uid=$uid";
    $ar = json_decode(file_get_contents($url_server_a));
    
于 2009-12-03T18:46:52.580 回答
0

我想您可以将其序列化,将其保存为可从另一台服务器访问的文件,然后从另一台服务器再次加载它。这样,不需要用户操作,但您必须保护保存文件的目录以避免隐私问题。

编辑:我假设他们在不同的服务器上,否则会更容易......

于 2009-12-03T18:26:45.247 回答
0

如果是我,我会将信息存储在其他介质中:例如 memcache 类型的环境,或者两者都可以访问的数据库。

于 2009-12-03T18:28:43.747 回答
0

After the array is created you could quickly generate a page that has a form which contains the data in a hidden field. This page could then automatically submit the form (with method="POST") to your redirect.

于 2009-12-03T18:32:47.197 回答
0

您可以将数组解码为 JSON 并将链接发送到第二个服务器,其中包含临时 JSON 文件的下载,只需将 JSON 文件重新解码回 PHP,您不必使用 LONG URL。

于 2009-12-03T18:52:07.687 回答