如何在Rails 6.0.3中为会话Cookie添加__Host或__Secure前缀?
解决方案
你之前的配置存在两处核心错误,调整后即可实现__Host-前缀的会话Cookie:
:key配置需要填写完整的Cookie名称,而非仅前缀,Rails默认会话Cookie名为_<你的应用名>_session,需要在前缀后补全该名称__Host-前缀的Cookie有强制规范要求,必须满足以下条件才会被浏览器认可:- 必须开启
Secure属性 - 不能指定
domain属性,你原有配置中domain: :all会导致前缀失效,需要删除该配置 - 必须显式指定
path: '/'
- 必须开启
修正后的config/initializers/session_store.rb配置如下:
opts = {} if Rails.configuration.host == "myapplication.com" # 移除domain: :all配置,__Host前缀Cookie不允许指定domain opts = {expire_after: 2.months} end unless Rails.env.test? opts[:secure] = true opts[:same_site] = :none end # 替换为你实际的应用会话Cookie名,前缀+原名 opts[:key] = '__Host-_你的应用名_session' opts[:path] = '/' Rails.application.config.session_store :active_record_store, **opts
如果你使用auth-logic的记住我功能,还需要额外修改auth-logic的初始化配置,为记住我Cookie也添加对应前缀:
# config/initializers/auth_logic.rb AuthLogic.configure do |config| config.remember_me_cookie_key = '__Host-_你的应用名_remember_me' end
注意事项
上线后需要提示用户清空浏览器旧Cookie,否则新旧Cookie同时存在会导致登录状态异常。
你需要的Cookie效果示例:
内容的提问来源于stack exchange,提问作者Arsii Rasheed
相关产品推荐
相关产品推荐

