如何在相同的rails应用程序和同一服务器中的不同域名之间共享会话?

时间:2016-03-14 14:45:43

标签: ruby-on-rails apache session ruby-on-rails-4

我有两个域名,例如'example.com'和'website.com'。这些域点击了与单个数据库相关联的same serversame Rails 4 app。通过使用路由约束,我已重定向到所需的域URL。这个Rails应用程序通过Apache运行。

如果用户登录example.com,则需要直接与website.com共享登录会话。不仅是身份验证会话,而且,如果我在登录前在“example.com”中设置了任何会话变量,那么该会话也应该与“website.com”共享。 (反之亦然)

示例:

会话类似于example.com中的会话[:example] =“1234”,该会话应与website.com共享

我在Rails中使用'devise'进行灵活的身份验证。

2 个答案:

答案 0 :(得分:1)

我相信,没有简单的方法可以做到这一点。 Rails会话基于cookie,并且不能在域之间共享cookie。 (它们只能在子域之间共享,例如api.someapp.comsomeapp.com)。

对于经过身份验证的用户,您可以使用/构建某种SSO解决方案,该解决方案将会话存储在服务器上,并为每个使用的域发出某种会话ID。

对于未经过身份验证的用户,您可以选择其中一个域作为“主要”域并执行小型jsonp / iframe /对该域的任何请求,这样您就可以在域之间共享数据。

但是使用股票Rails会话所有这些东西要复杂得多。

答案 1 :(得分:0)

Someone share this idea在另一个SO问题上使用iframe。但是哈文没试过。 此外,here is another solution使用看起来更干净的Devise authenticatable功能。