如何设置Rails cookie在某个日期开始和/或过期?
Answers:
Rails 5文档摘录:
Cookie是通过ActionController#cookies读写的。
读取的cookie是随请求一起接收的cookie,写入的cookie将与响应一起发送出去。读取cookie不会使cookie对象本身返回,而只能获取它持有的值。
写作例子:
# Sets a simple session cookie. # This cookie will be deleted when the user's browser is closed. cookies[:user_name] = "david" # Sets a cookie that expires in 1 hour. cookies[:login] = { value: "XJ-122", expires: 1.hour } # Sets a cookie that expires at a specific time. cookies[:login] = { value: "XJ-122", expires: Time.utc(2020, 10, 15, 5) } # Sets a "permanent" cookie (which expires in 20 years from now). cookies.permanent[:login] = "XJ-122"
[...]
设置cookie的选项符号为:
:expires
-此Cookie过期的时间,作为Time或ActiveSupport :: Duration对象。[...]
cookies[:login] = { value: "JX-122", expires: 3.months }
会引发错误。但这不会。cookies[:login] = { value: "JX-122", expires: 3.months.from_now }
有关详细信息,请参阅github.com/rack/rack/issues/864#issuecomment-104706555
您的问题可能与以下问题有关: 如何在Rails中动态设置基于cookie的会话的到期时间
评论之一指向不推荐使用SlideSessions:
“ ..如果您需要为通过应用程序中所有控制器的会话设置有效期限,只需在config / intializers / session_store.rb文件中添加以下选项:
:expire_after => 60.minutes
如果需要在不同的控制器或操作中设置不同的到期时间,请在操作中使用以下代码或某些before_filter:
request.session_options = request.session_options.dup request.session_options[:expire_after]= 5.minutes request.session_options.freeze
仅因为此时已经冻结了哈希,所以才需要重复哈希,即使至少:expire_after的修改是可能的,并且可以完美地工作……”
希望对您有所帮助。:)