Rails - 多个***域和单个会话/cookie
Posted
技术标签:
【中文标题】Rails - 多个***域和单个会话/cookie【英文标题】:Rails - Multiple top level domains and a single session/cookie 【发布时间】:2010-09-27 11:43:27 【问题描述】:我已经为此苦苦挣扎了很长一段时间,但一直无法 找到解决办法。我需要一个用户能够查看多个*** 单次登录的域。
我的理解是这个需要设置在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]
。
非常感谢任何帮助。
【问题讨论】:
zenazn 关于 cookie 限制的回应是一个很好的回应。至少有人可以提供跨子域一次登录的示例吗? Cookies 应该支持这一点。 Rails 怎么样? 【参考方案1】:对于 Rails 2.3 中的子域
ActionController::Base.session = :domain => ".mydomain.com"
对于***域,请尝试this middleware。
目前我一直在使用上述中间件,但它并没有按预期工作。如果您确实使用中间件,则不需要上面的代码,因为它也处理子域。
【讨论】:
【参考方案2】:Keltia 和 zuk 都是对的,答案是 rubyCAS,我们已经完成了集成,它允许
SSI - 单点登录 您登录一个站点,您将自动登录另一个站点
SSO - 单点登出 您从一个站点退出并自动从另一个站点退出
对我们来说,这是一种行之有效的解决方案,实施起来并不难
我们正在使用它 http://www.cabslk.com 和 www.ticketslk.com
干杯, 萨梅拉
【讨论】:
【参考方案3】:如果您想跨域进行身份验证,无论它们是***域还是子域,您可能需要 RubyCAS 之类的东西。
【讨论】:
【参考方案4】:这个有点棘手。由于 cookie 只能分配给(并从中检索)当前域(例如“forms.example.com”)和父域(“.example.com”,但不能分配给“.com”),但不能分配给其他域(“othersite.com”),你必须自己找到另一个解决方案。这与 Rails 无关,而与 cookie 的工作方式有关。
编辑:会话依赖于特定于客户端的句柄,存储在 cookie 中,这就是会话也不能跨域工作的原因。
This site 有一种可能的解决方案来创建跨域 cookie,它是我所知道的最干净的方法,尽管它可能有一些安全隐患。更复杂的版本是让服务器通过某种安全通道直接通信。
如果您正在寻找更通用的单登录服务,请尝试实现某种形式的OpenID。
【讨论】:
【参考方案5】:恕我直言,您的问题不够精确。您想要为您拥有的所有 Rails 应用程序提供一个 cookie,还是在单个 cookie 的上下文中?如果是前者,您想查看使用数据库支持的会话或类似RubyCAS 的解决方案来实现CAS 协议。
【讨论】:
以上是关于Rails - 多个***域和单个会话/cookie的主要内容,如果未能解决你的问题,请参考以下文章