我正在使用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')
只是为了看看会发生什么,什么都没有改变,它仍然只会在会话中到期。
我应该如何使用Sinatra在Ruby中为我的cookie设置过期时间?
答案 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
。