2010-01-07 21 views
3

我们有两个不同的Web应用程序,它们具有不同的服务器,堆栈等。让我们调用一个主机,位于host.example.com,另一个客户端位于client.example .com在不同服务器上的Web应用程序之间传递用户数据

我们希望我们的用户登录到主机,并通过他们的凭据和其他一些信息(真实姓名,电子邮件地址,出生日期等)到客户端。这样做的最好方法是什么?当用户在主机上查看页面时,用户通过Javascript请求访问客户端。

标准:

  • 最重要的标准是,更改主机应该是简单和容易尽可能。
  • 我们不能重定向用户(虽然他们的JS请求是公平的游戏)
  • 主机必须是平台不可知的。客户端在App Engine上是Django,但是我认为这并不重要。我们认为

两个选项:

  • 在客户端主机的API来传递数据。粗略地说,在登录时,主机会获取登录/在客户端上,并传递会话ID以及数据。

  • 存储的数据是一个签名或加密的cookie。从最近关于在Django上签名cookie的讨论来看,这看起来很难做到。

回答

0

这是一种粗略的,但您可以执行重定向到客户端上的页面,并将相关数据作为GET变量包含在内。如果你这样做,你应该编码/加密数据。客户会拿起数据,设置相关的会话信息,然后继续。

+0

是的,但我们真的不想重定向。我相应地更新了这个问题。 – 2010-01-07 18:23:22

+0

那么浏览器如何在客户端结束? – 2010-01-07 18:24:53

+1

通过javascript请求。所以我们可以重定向请求,但不是用户的注意。 – 2010-01-07 18:32:20

0

也许通过共享会话状态? Here's an example,它使用默认的SQL Server会话提供程序并调整GetTempAppId sproc以提供相同的值,因此使得存储和检索看起来好像来自单个应用程序。

-1

有没有简单的方法做了一个很好的工作。有很多方法可以做到,但没有一个是简单和安全的。你可以考虑主机上的cgi/fastcgi/web服务技术。

1

你也可以使用这些解决方案的混合体。如果登录生成了哈希/定时SessionID并将其与IP /用户ID一起存储在一个小会话数据库中,则可以将这些数据存储在域级cookie中,并将其正确传递。然后,客户端会首次验证sessionid/timestamp/ip/etc对数据库,以验证即时身份验证,然后继续处理用户和会话的快乐方式,但它期望处理它。如果您将时间戳期望保持为相当短的时间(10秒?),那么可以使用它并使用它,然后可以使用数据库cron作业来修剪错误或未使用的条目。

+0

我没有看到任何优势超过第一个选项。 – 2010-01-14 19:40:07

+0

这取决于体系结构以及如何应用更新。一个是连接的体系结构,另一个是断开的。我看不出比另一个更好,这只是一个偏好问题。我有一种印象,他们以“我们不是真的想这样做”的心态看待API,所以我提出了一些不同的看法。 – 2010-01-14 20:01:56

相关问题