在 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 过期时间的主要内容,如果未能解决你的问题,请参考以下文章