You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails 6.0.3中为会话Cookie添加__Host或__Secure前缀?

解决方案

你之前的配置存在两处核心错误,调整后即可实现__Host-前缀的会话Cookie:

  1. :key配置需要填写完整的Cookie名称,而非仅前缀,Rails默认会话Cookie名为_<你的应用名>_session,需要在前缀后补全该名称
  2. __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效果示例:
GitHub Cookie示例

内容的提问来源于stack exchange,提问作者Arsii Rasheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:27:02