如何在混合Ruby / GWT系统中管理会话?

我目前有一个Ruby on Rails系统,并计划将其移植到GWT。 在我们这样做之前,想要在GWT中编写部分站点的概念certificate以表明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系统意识到许多不同的用户正在与该单个客户端进行通信。

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

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

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