Ruby on rails Rails-多个顶级域和一个会话/cookie

Ruby on rails Rails-多个顶级域和一个会话/cookie,ruby-on-rails,ruby,session,dns,Ruby On Rails,Ruby,Session,Dns,我已经为此挣扎了很长一段时间,但一直没能做到 找到解决办法。我需要一个用户能够查看多个顶级 具有单个登录名的域 我的理解是,这需要在environment.rb中设置,并且 在发送前用调用。这就是我想到的: require 'activesupport' require 'dispatcher' module ActionController class Dispatcher def set_session_domain ActionController::

我已经为此挣扎了很长一段时间,但一直没能做到 找到解决办法。我需要一个用户能够查看多个顶级 具有单个登录名的域

我的理解是,这需要在
environment.rb中设置,并且
在发送前用
调用
。这就是我想到的:

require 'activesupport'
require 'dispatcher'
module ActionController
   class Dispatcher

      def set_session_domain
         ActionController::Base.session_options.update :session_domain => "#{@request.host}"
      end 

      before_dispatch :set_session_domain
   end
end
但是,当我尝试提取值时,这似乎不起作用 从
会话[:会话\u域]


非常感谢您的帮助。

我觉得您的问题不够精确。您希望所有Rails应用程序都有一个cookie,还是在一个cookie的上下文中?如果是前者,您需要考虑使用数据库支持的会话或类似的解决方案来实现协议。

这一个有点棘手。由于Cookie只能分配给当前域(“forms.example.com”)和父域(“example.com”,但不能分配给“.com”),而不能分配给其他域(“othersite.com”),因此您必须找到另一个解决方案。这与Rails无关,但与Cookie的工作方式有关

编辑:会话依赖于存储在cookie中的特定于客户端的句柄,这就是会话不能跨域工作的原因

有一个可能的解决方案来创建跨域cookie,这是我所知道的最干净的方法,尽管它可能有一些安全隐患。更复杂的版本是让服务器通过某种安全通道直接通信


如果您正在寻找更通用的单一登录服务,请尝试实现某种形式的。

如果您想要跨域进行身份验证,无论是顶级域还是子域,您可能需要类似RubyCAS的东西。

Keltia和zuk都是对的,答案是RubyCAS,我们已经做了整合,它允许

SSI-单点登录 您登录到一个站点,然后自动登录到另一个站点

单点登录-单点注销 您从一个站点注销,然后自动从另一个站点注销

对我们来说,这是一个行之有效的解决方案,实施起来并不困难

我们正在使用它 以及www.ticketslk.com

干杯,
Rails 2.3中子域的Sameera

ActionController::Base.session = { :domain => ".mydomain.com" }
对于顶级域,请尝试


目前我一直在使用上述中间件,但它并没有像预期的那样工作。如果您确实使用了中间件,则不需要上面的代码,因为它也处理子域。

zenazn对Cookie局限性的回应是很好的。至少有人能提供一个跨子域登录的例子吗?Cookies应该支持这一点。Rails是如何运行的?