在Ruby

时间:2016-09-03 08:12:03

标签: ruby cookies sinatra

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

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

  1. require 'active_support'
  2. require 'active_support/all'
  3. require 'activesupport'
  4. 所以,我尝试了这个:

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

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

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

1 个答案:

答案 0 :(得分:2)

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