我需要做的是将这些子域之间的会话分开:
system.domain.com
与portal.domain.com
,blog.domain.com
,domain.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
我也为此编写了规格,看起来一切都很好,但是,仔细检查后,它并没有达到预期的功能。
请帮助。