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是如何运行的?