在 Ruby 中设置 cookie 过期时间

Posted

技术标签:

【中文标题】在 Ruby 中设置 cookie 过期时间【英文标题】:Set cookie expiration time in Ruby 【发布时间】:2017-01-11 07:10:33 【问题描述】:

我正在使用 Ruby 和 Sinatra 开发一个 Web 应用程序。 我有 Ruby 版本 2.3.0,Sinatra 5.0.30

按照Rails cookies, set start date and expire date 的建议,我尝试了这个:

@language = 'en-US'
response.set_cookie(:USER_LANGUAGE, :value => @language, :expires => 1.hour.from_now, :domain => '.example.com')

起初我认为它有效,因为除了过期时间之外的 cookie 集仍然仅用于会话。我的 Apache 错误日志中的错误是这样的: NoMethodError - undefined method 'hour' for 1:Fixnum:

请注意:这些都不能解决问题(编译器无法正确找到它们)

    require 'active_support' require 'active_support/all' require 'activesupport'

所以,我尝试了这个:

@language = 'en-US'
response.set_cookie(:USER_LANGUAGE, :value => @language, :expires => 30, :domain => '.example.com')

只是看看会发生什么,没有任何改变,它仍然只在会话中过期。

我应该如何在 Ruby 中使用 Sinatra 为我的 cookie 设置过期时间?

【问题讨论】:

【参考方案1】:

Sinatra 没有 ActiveSupport 库,它为数字时间提供帮助,所以 1.hour.from_now 在这里不起作用。

你应该使用这个:

class SinatraApp < Sinatra::Base

use Rack::Session::Cookie, :key => 'rack.session',
                           :domain => 'foo.com',
                           :path => '/',
                           :expire_after => 2592000, # In seconds
                           :secret => 'some_secret'

并以秒为单位设置时间。因为 Sinatra 会话来自 Rack::Session

HOW TO ENABLE SESSIONS WITH SINATRA

【讨论】:

谢谢。您提供的 getlaura.com 链接是我整天搜索的那种文件。

以上是关于在 Ruby 中设置 cookie 过期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中设置会话永不过期

Java中设置Session过期时间(Spring Boot)

在Redis中设置了过期时间的Key,需要注意哪些问题?

Redis中设置过期实践key

Redis中设置过期实践key

nginx add_header Set-Cookie 过期不起作用