Rails cookie的失效日期错误

时间:2012-10-31 18:04:33

标签: ruby-on-rails-3 cookies

最近我尝试设置一个cookie,以便在Rails 3.2应用程序中验证会话。

cookie应该在第二天开始到期,这样我会强制用户再次登录(强制性)

首先,我将应用的时区更改为我期望处理的时区:

config.time_zone = 'Caracas'

之后我按如下方式创建了cookie:

cookies[:remember_token] = {value: user.remember_token, 
                            expires: 1.day.from_now.beginning_of_day}

创建cookie时没有任何问题,但是过期日期是错误的。在Chromium中,日期设置为今天下午19:30(虽然我的机器时区是根据应用程序设置的)。

当我将cookie的定义更改为:

时,会出现奇怪的事情
cookies[:remember_token] = {value: user.remember_token, 
                            expires: 1.day.from_now}

如果我从现在开始只设置为1天,则过期日期恰好设置为从现在开始的24小时。

为什么begin_of_date没有正确设置日期?

提前致谢

1 个答案:

答案 0 :(得分:3)

这是执行的顺序。在计算开始日期后应用时区。例如。我在UTC时区,我可以在rails console中执行以下操作:

irb(main):019:0> 1.day.from_now.in_time_zone(Time.zone).beginning_of_day
=> Thu, 01 Nov 2012 00:00:00 UTC +00:00
irb(main):020:0> 1.day.from_now.beginning_of_day.in_time_zone(Time.zone)
=> Thu, 01 Nov 2012 00:00:00 UTC +00:00
irb(main):021:0> Time.zone.now.tomorrow.beginning_of_day 
=> Thu, 01 Nov 2012 00:00:00 UTC +00:00
irb(main):022:0> 1.day.from_now.beginning_of_day.in_time_zone('Caracas')
=> Wed, 31 Oct 2012 19:30:00 VET -04:30
irb(main):023:0> 1.day.from_now.in_time_zone('Caracas').beginning_of_day
=> Thu, 01 Nov 2012 00:00:00 VET -04:30

因此,如果您将Cookie计算更改为以下内容,则应该有效:

cookies[:remember_token] = {value: user.remember_token, 
                            expires: 1.day.from_now.in_time_zone(Time.zone).beginning_of_day}