Rails - 多个顶级域和单个会话/ cookie

18 ruby dns session ruby-on-rails

我一直在努力解决这个问题已经有一段时间了,并且无法找到解决方案.我需要用户能够通过一次登录查看多个顶级域名.

我的理解是,这需要设置environment.rb和调用before_dispatch.这就是我想出来的:

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
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从中提取值时,这似乎不起作用session[:session_domain].

任何帮助是极大的赞赏.

zen*_*azn 8

这个有点棘手.由于cookie只能分配给(并从中检索)当前域(例如"forms.example.com")和父域(".example.com",但不是".com"),但不能分配给其他域("othersite.com"),你必须找到另一种解决方案.这与Rails无关,但与cookies的工作方式有关.

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

这个站点有一个可能的解决方案来创建跨域cookie,这是我所知道的最干净的方式,虽然它可能有一些安全隐患.更复杂的版本将使服务器直接通过某个安全通道进行通信.

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


Kel*_*tia 0

恕我直言,你的问题不够精确。您是否想要为您拥有的所有 Rails 应用程序使用一个 cookie,还是在单个 cookie 的上下文中?如果是前者,您希望查看使用数据库支持的会话或类似RubyCAS的解决方案来实现CAS协议。