如何禁用Rails中会话自动过期?能否删除expire_after配置项?
Rails会话永久有效性配置问题
问题描述
我们希望搭建一个会话不会在指定时段内自动过期的Rails应用。请问直接删除以下配置代码中的expire_after: 3.day,行,是否可实现会话不自动过期?
config.middleware.use( ActionDispatch::Session::CookieStore, key: '_myApp_session', expire_after: 3.day, serializer: :json )
回答
直接删除expire_after: 3.day,这一行,确实能让会话不会按固定时长自动过期——Rails的CookieStore在未显式设置expire_after参数时,会生成「会话Cookie」,这类Cookie的有效期仅持续到用户关闭浏览器为止,而非按预设时长到期。
但需要区分两种需求:
- 若你需要的是「会话随浏览器关闭而失效,但不按固定时长过期」,删除该行完全可行;
- 若你需要的是永久保留会话(即使用户关闭浏览器也不失效),删除该行无法实现,此时需要设置一个极长的有效期,比如:
expire_after: 10.years
额外注意事项:
- 浏览器的隐私设置可能会影响Cookie的留存,比如部分浏览器会在退出时自动清理所有Cookie,这种情况下即使是会话Cookie也会被清除;
- 不同Rails小版本的
CookieStore默认行为一致,无需担心版本差异问题。
内容的提问来源于stack exchange,提问作者Pema Namgay
相关产品推荐
相关产品推荐

