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

问题描述 投票:0回答:5

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

我的理解是这需要在

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

但是,当我尝试提取值时,这似乎不起作用 来自

session[:session_domain]

非常感谢任何帮助。

ruby-on-rails ruby session dns
5个回答
8
投票

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

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

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

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


2
投票

对于 Rails 2.3 中的子域

ActionController::Base.session = { :domain => ".mydomain.com" }

1
投票

如果您希望跨域进行身份验证,无论它们是顶级域还是子域,您可能需要像 RubyCAS 这样的东西。


0
投票

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


0
投票

Keltia 和 zuk 都是对的,答案是 rubyCAS,我们已经进行了集成,它允许

SSI-单点登录 您登录一个网站后会自动登录另一个网站

SSO - 单点登录 您从一个网站退出后,您也会自动从另一个网站退出

对我们来说,这是一个经过验证的解决方案,而且实施起来并不困难

我们正在使用它 http://www.cabslk.com 和 www.ticketslk.com

干杯, 萨梅拉

© www.soinside.com 2019 - 2024. All rights reserved.