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

83 cookies ruby-on-rails

如何设置Rails cookie在特定日期开始和/或到期?

Sen*_*ran 196

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"
Run Code Online (Sandbox Code Playgroud)

[...]

设置cookie的选项符号是:

  • :expires - 此cookie到期的时间,作为Time或ActiveSupport :: Duration对象.

[...]

  • 这些都在文档中:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html (23认同)
  • @Senthil,如果你从另一篇文章中得到一些东西(在这种情况下,就像'来自rails docs'那样),请提供对原点的引用. (8认同)

pag*_*man 18

您的问题可能与此问题有关: 如何在Rails中动态设置基于cookie的会话的到期时间

其中一条评论指向弃用SlideSessions:

"..如果您需要通过应用程序中的所有控制器设置会话的有效期,只需将以下选项添加到config/intializers/session_store.rb文件中:

:expire_after => 60.minutes
Run Code Online (Sandbox Code Playgroud)

如果需要在不同的控制器或操作中设置不同的到期时间,请使用以下代码或某些before_filter:

request.session_options = request.session_options.dup
request.session_options[:expire_after]= 5.minutes
request.session_options.freeze
Run Code Online (Sandbox Code Playgroud)

需要复制哈希只是因为它已经在那时被冻结了,即使至少修改了:expire_after是可能的并且可以完美地工作......"

我希望有所帮助.:)