【问题标题】:How do I manage sessions in a hybrid Ruby/GWT system?如何在混合 Ruby/GWT 系统中管理会话?
【发布时间】:2011-01-20 15:05:43
【问题描述】:

我目前有一个 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 系统知道许多不同的用户从同一个客户端与它通信。

【问题讨论】:

  • “用户开始与 Tomcat 系统的会话”是什么意思?他是使用 Tomcat 的某种身份验证方法还是自定义解决方案登录?无论哪种方式,会话密钥很可能存储在 cookie 中(如 JSESSIONID),您只需确保将其传递给 RoR 端。
  • 我对您的第 2 步和第 3 步非常感兴趣。您是否需要进行任何自定义 RPC 序列化处理?您在 GWT 服务器端使用什么基本机制来发出“对 Rails 系统的等效 Ajax 请求”?我对 GWT-Rails 接口特别感兴趣。谢谢!

标签: ruby-on-rails session gwt hybrid


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我会试试这个。感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2012-02-22
    相关资源
    最近更新 更多