所以我以不同的方式问了这个问题here https://stackoverflow.com/questions/14712968/session-expiration-not-working-in-rails/14713390#14713390没有得到答案,所以我将尝试重新表述它,因为这似乎是一个非常简单的问题。
我有一个带有基于 cookie 会话的 Rails 应用程序。默认情况下,它们没有任何 expires_at 时间戳,因此会话 cookie 的范围是“会话”。这是普通的 Rails 会话内容。
现在我想创建一个“演示用户”功能,在 15 分钟后将用户踢出。为了实现这一点,我想在 Time.now + 15.mines 的会话 cookie 上设置 expires_at
session[:expires_at] = Time.now + 15.minutes
现在上面的代码确实执行了,但它对 cookie 的范围没有影响。范围仍然是“会话”。如何将范围从“会话”更改为日期时间?
如果我将 Production.rb 中的整个应用程序的会话配置为
:expire_after => 24.hours
然后它就会起作用......但问题是我想有选择地控制会话cookie的过期日期。
Edit:事实证明,当我设置 session[:expires_at] 时,对 cookie 范围没有影响的原因是因为后续请求会破坏会话 cookie 并将其重置回会话。仍然不知道该怎么办。
也许不依赖 cookie 过期(请参阅第 2.9 节)《Ruby On Rails 安全指南》 http://guides.rubyonrails.org/security.html为什么它不好),类似于这个答案 https://stackoverflow.com/questions/5860950/setting-session-timeout-in-rails-3,在会话本身中创建会话时存储时间戳(例如session[:created_at]
),然后检查每个请求是否需要对这些“演示用户”过期:
before_filter :check_session
def check_session
# TODO: check session validity
if session[:demo_user] && session[:created_at] > 15.minutes.ago
reset_session
# TODO: redirect to login page
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)