我想在我的Rails应用程序中跨多个域共享数据库会话。我知道这不是采取的最佳方法,但是与我合作的客户坚持要这样做。
我采用的方法是使用ActiveRecord-SessionStore。这将允许我将会话数据存储在服务器端。
从理论上讲,如果我可以在浏览器中跨每个共享域设置会话令牌cookie,则它们应该针对每个请求从数据库中加载正确的会话记录。
# Headers
Set-Cookie: _mydomain_session=78bd9973o5d3424a37fa1fa1d52d22f3; path=/; HttpOnly
事实证明,这比我预想的要困难得多,因为在Rails中似乎没有明确的方法来设置或重置会话对象。
理想情况下,Rails会允许以下内容:
# on domain 1
def my_action
session[:user_id] = @current_user.id
redirect_to("https://domain-2.com?session_id=#{session.id}")
end
# on domain 2
before_filter do
request.session.id = "ID-from-other-domain"
end
private
def current_user
@current_user = User.find(session[:user_id])
end
如何在多个域之间共享会话ID(在Rails 4中),以允许我们跨域共享会话?