PHP:在两个站点之间传输大型数组

时间:2009-12-03 18:19:13

标签: php session post get superglobals

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

我无法使用SESSION超全局,因为它仅限于特定域。 GET不合适,因为阵列太长。 我不确定POST是否合适,如果有办法自动发送数据而不强迫用户点击按钮并提交一些表格。我知道javascript可以用于此,但更喜欢有更健壮的东西。

我对PHP比较陌生,并且很想听听其他任何表现方式。 谢谢!

10 个答案:

答案 0 :(得分:4)

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

使用上述方法您可能想要了解的一点是,根据实施方式,用户可能会在数据出现之前到达。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我会做这样的事情:

  • 在服务器A 上生成令牌(例如sha1(时间戳+会话ID +随机()))
  • 使用cURL将序列化数组发布到服务器B,并传递您生成的令牌
  • 在服务器B上,将序列化数据和令牌存储在数据库表中 - 字段:令牌(CHAR),数据(BLOB)
  • 将用户重定向到http://ServerB/?data_token=[TOKEN GENERATED IN STEP 1]
  • 服务器B从数据库中提取与令牌关联的数据,删除数据库条目,并将数组存储在新用户会话中。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

您的问题:

已发送阵列(ar)服务器(a)服务器(b)

我的解决方案:

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

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

    $url = "http://server-b/page"; // url to page
    header('Location: $url?uid=$uid');
    
  3. 服务器(b)服务器(a)获取网址的内容,并将内容解码回数组(AR)

    $uid = $_GET['uid']; // uid
    $url_server_a = "http://server-a/webservice?uid=$uid";
    $ar = json_decode(file_get_contents($url_server_a));
    

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

创建数组后,您可以快速生成一个页面,其中包含隐藏字段中的数据。然后,此页面可以自动将表单(使用method =“POST”)提交给您的重定向。

答案 9 :(得分:0)

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