我已经为此苦苦挣扎了很长一段时间,但一直无法 找到解决方案。我需要一个用户能够查看多个顶级 单一登录的域名。
我的理解是这需要在
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]
。
非常感谢任何帮助。
这个有点棘手。由于 cookie 只能分配给当前域(例如“forms.example.com”)和父域(“.example.com”,但不能分配给“.com”)(并从中检索),但不能分配给其他域(“othersite.com”),您必须找到另一个解决方案。这与 Rails 无关,而是与 cookie 的工作方式有关。
编辑:会话依赖于存储在 cookie 中的特定于客户端的句柄,这就是会话也不能跨域工作的原因。
这个网站有一个可能的解决方案来创建跨域cookie,这是我所知道的最干净的方法,尽管它可能有一些安全隐患。更复杂的版本将让服务器通过某些安全通道直接通信。
如果您正在寻找更通用的单点登录服务,请尝试实现某种形式的 OpenID。
对于 Rails 2.3 中的子域
ActionController::Base.session = { :domain => ".mydomain.com" }
如果您希望跨域进行身份验证,无论它们是顶级域还是子域,您可能需要像 RubyCAS 这样的东西。
Keltia 和 zuk 都是对的,答案是 rubyCAS,我们已经进行了集成,它允许
SSI-单点登录 您登录一个网站后会自动登录另一个网站
SSO - 单点登录 您从一个网站退出后,您也会自动从另一个网站退出
对我们来说,这是一个经过验证的解决方案,而且实施起来并不困难
我们正在使用它 http://www.cabslk.com 和 www.ticketslk.com
干杯, 萨梅拉