Rails中如何将现有www.级别Cookie迁移/复制为*.通配符级别Cookie
适用场景
将原存储在www.example.com域名下的会话Cookie,无感知迁移到*.example.com根域名,适配多子域名业务,无需用户重新登录。
操作步骤
- 修改会话存储配置
打开config/initializers/session_store.rb,修改配置如下:
# 替换your_app为你的应用实际标识 Rails.application.config.session_store :cookie_store, key: '_your_app_session', domain: :all, # 自动适配当前服务的根域名,等效于写死为'.example.com' tld_length: 1 # 顶级域名长度,若为.co.jp这类二级顶级域名,改为2即可
- 确认加密密钥不变
不要修改config/credentials.yml.enc或者config/secrets.yml中的secret_key_base,会话内容的加解密依赖该密钥,密钥不变的前提下,旧域名下的会话可以被正常读取,新写入的根域名会话内容和旧会话完全一致。
生效逻辑
用户首次访问www.example.com时,请求会携带旧域名下的会话Cookie,Rails可以正常解密读取会话内容,响应时会自动写入新的根域名下的同名会话Cookie。后续用户访问任意example.com的子域名时,都会携带根域名下的会话Cookie,直接识别为登录状态。
注意事项
- 若业务中存在自定义写入的Cookie(非Rails默认会话),写入时需同步指定
domain: :all参数,示例:cookies[:business_tag] = { value: 'xxx', domain: :all, expires: 30.days.from_now } - 如需允许跨子域的POST请求,可在
config/application.rb中添加跨域信任配置:config.action_controller.allowed_origins = /\.example\.com$/ - 测试阶段不要使用
localhost访问,可修改本地hosts文件绑定测试域名到本地IP,使用真实域名规则测试。
内容的提问来源于stack exchange,提问作者Quintrino
相关产品推荐
相关产品推荐

