在 Ruby 中设置 cookie 过期时间

Set cookie expiration time in Ruby

我正在使用 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:

请注意:其中 none 个解决了问题(none 个可以被编译器正确找到)

  1. require 'active_support'
  2. require 'active_support/all'
  3. require 'activesupport'

所以,我尝试了这个:

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

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

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

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