设置Rails cookie的开始日期和到期日期


Answers:


200

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对象。

[...]



8
@Senthil,如果您从其他文章(在这种情况下,是从Rails文档“按原样”获取)中获取信息,请提供原始信息的参考。
sameera207

1
也:expires选项应该是一个Time实例。 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
zhisme

18

您的问题可能与以下问题有关: 如何在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的修改是可能的,并且可以完美地工作……”

希望对您有所帮助。:)


是否也可以为ActiveRecord会话存储执行此操作?
Lohith MV

4

值得注意的是,到目前为止,无法设置Cookie的开始时间。cookie集始终立即处于活动状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.