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

Posted

技术标签:

【中文标题】设置 Rails cookie 的开始日期和到期日期【英文标题】:Set start date and expiration date for Rails cookies 【发布时间】:2010-11-16 23:01:35 【问题描述】:

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

【问题讨论】:

【参考方案1】:

摘自Rails 5 documentation:

Cookie 是通过 ActionController#cookies 读取和写入的。

正在读取的 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"

[...]

设置cookies的选项符号有:

:expires - 此 cookie 过期的时间,作为 Time 或 ActiveSupport::Duration 对象。

[...]

【讨论】:

这一切都在文档中:api.rubyonrails.org/classes/ActionDispatch/Cookies.html @Senthil,如果您从另一篇文章中得到一些东西(在这种情况下,“原样”来自 rails 文档),请提供对来源的参考。 also :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【参考方案2】:

您的问题可能与以下问题有关: How to I dynamically set the expiry time for a cookie-based session in Rails

其中一个 cmets 指向Deprecating SlideSessions:

"..如果需要设置有效期 通过所有控制器的会话 在您的应用程序中,只需添加 您的以下选项 配置/初始化程序/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

只需要复制哈希 因为它已经被冻结了 点,即使修改 at 至少 :expire_after 是可能的并且 完美无瑕……”

我希望这会有所帮助。 :)

【讨论】:

ActiveRecord 会话存储也可以这样做吗?【参考方案3】:

值得注意的是,目前无法为 cookie 设置开始时间。 cookie 集总是立即激活。

【讨论】:

以上是关于设置 Rails cookie 的开始日期和到期日期的主要内容,如果未能解决你的问题,请参考以下文章

$cookies 与 angularjs 1.4 到期日期

怎样设置cookie的到期时间

$cookieStore 过期未设置

使用角度设置 Cookie 参数“HttpOnly”的任何想法

如何为 Firestore 文档设置到期日期 [重复]

使会话 cookie 在 2 年内过期