0

我目前有一个 Ruby on Rails 系统,并计划将其移植到 GWT。在我们这样做之前,希望有一个概念证明,其中部分网站是用 GWT 编写的,以表明 GWT 可以使用和显示当前内容。系统GWT部分的数据流如下:

  1. 客户端向 GWT 服务器发送 RPC 调用
  2. 服务器接收 RPC 调用,然后向 Rails 系统发出等效的 Ajax 请求
  3. 服务器从 Ajax 请求的结果中生成一个 Java 对象,并将其传递回客户端

我现在遇到的问题是跨两个系统管理用户会话数据。我们只有 1 个 Tomcat 实例,它有自己的会话类型,然后我们的 Ruby 系统使用 ActiveRecordStore 将会话数据存储在数据库中。

这里的问题是,当 Tomcat 系统与 Ruby 系统对话时,如果 GWT 客户端发出了登录请求,那么最后一个从 GWT 系统登录的用户在 Rails 系统中执行所有传出的 Ajax 请求,就好像他们'重新成为当前用户,因为 Tomcat 系统看起来像 Rails 的单个客户端。

无论如何,我怎样才能做到这一点,如果用户开始与 Tomcat 系统的会话,Ruby 系统将意识到这一点并有一个等效的会话,因此即使 Tomcat 服务器是它的单个客户端,Rails 系统意识到许多不同的用户正在从该单个客户端与它进行通信。

4

2 回答 2

1

我认为解决此问题的最佳方法是使用 cookie 而不是数据库来存储会话。Rails 本身就支持这一点,实际上它是一段时间以来的默认 cookie 存储。cookie 本身由服务器机密签名,以防止用户篡改。我认为 Rails 实现使用 Ruby 编组来转储/加载数据,因此您可能必须在 Java 中实现它,或者您可以使用相同的想法在双方实现自己的 cookie 管理器。

也可以在您的 Java 应用程序中仅使用来自 JRuby 的 Ruby 代码。

于 2010-02-24T20:05:33.787 回答
0

我不知道 RoR,但在大多数 Web 技术中,会话都是使用 cookie 维护的。如果您在从 Java 服务器到 RoR 实例的多次调用中保留 cookie(针对给定用户),那么您应该一切都好。

于 2010-02-24T16:53:31.730 回答