如何在Rails响应中手动设置cookie?

时间:2018-10-26 15:33:39

标签: ruby-on-rails session ruby-on-rails-4

我想在我的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中),以允许我们跨域共享会话?

0 个答案:

没有答案