Rails 5中跨域的单独会话

时间:2018-10-31 05:19:24

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

我需要做的是将这些子域之间的会话分开:

system.domain.comportal.domain.comblog.domain.comdomain.com

所以我需要system才能使用单独的会话cookie存储。

我尝试编写中间件:

class DomainSession
  def initialize(app)
    @app = app
  end

  def call(env)
    case
    when env["SERVER_NAME"].start_with?("system.")
      env["rack.session.options"][:domain] = env["SERVER_NAME"]
    when env["SERVER_NAME"].split(".").size < 3
      env["rack.session.options"][:domain] = env["SERVER_NAME"]
    else
      env["rack.session.options"][:domain] = env["SERVER_NAME"].split(".")[1..-1].join(".")
    end
    @app.call(env)
  end
end

并添加这样的会话存储:

Rails.application.config.session_store :cookie_store, key: :_cross_session, domain: :all, tld_length: 2

我也为此编写了规格,看起来一切都很好,但是,仔细检查后,它并没有达到预期的功能。

请帮助。

0 个答案:

没有答案