Rails基于cookie的会话:将会话范围与到期时间混合

时间:2013-03-07 02:21:11

标签: ruby-on-rails session

所以我以不同的方式here提出了这个问题并没有得到答案,所以我试着改写它,因为这似乎是一个非常简单的问题。

我有一个基于cookie会话的Rails应用程序。默认情况下,他们没有任何expires_at时间戳,因此会话cookie的范围是' session'。这是你的香草Rails会话。

现在我想创建一个演示用户'我在15分钟后踢出用户的功能。为此,我想在Time.now + 15.minutes的会话cookie上设置expires_at

 session[:expires_at] = Time.now + 15.minutes 

现在上面这段代码确实执行了,但它对cookie的范围没有影响。范围仍然是' session'。如何更改“#session”会议的范围?成为约会时间?

如果我将生产.rb中的整个应用程序的会话配置为

 :expire_after =>  24.hours 

然后它会起作用......但问题是我想有选择地控制会话cookie上的截止日期。

编辑:当我设置会话[:expires_at]时,原因是因为后续请求破坏了会话cookie并重置了它回到会议。仍然不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

也许不是依赖于cookie过期(参见"Ruby On Rails Security Guide"中关于它为什么不好的第2.9节),类似于this answer,在会话本身创建会话时存储时间戳(比如{{1然后检查每个请求是否需要为这些“演示用户”过期:

session[:created_at]

答案 1 :(得分:0)

虽然不是非常优雅的方式,但这适用于单个会话:

...
request.env['rack.session.options'] = {expire_after: 15.minutes}
session[:user_id] = 1
...