gpt4 book ai didi

ruby-on-rails - 基于 Rails cookie 的 session : mixing session scope with expiration times

转载 作者:行者123 更新时间:2023-12-04 05:45:04 25 4
gpt4 key购买 nike

所以我以不同的方式问了这个问题here没有得到任何答案,所以我将尝试重新措辞,因为这似乎是一个非常简单的问题。

我有一个基于 cookie session 的 Rails 应用程序。默认情况下,它们没有任何 expires_at 时间戳,因此 session cookie 的范围是“ session ”。这是您的原始 Rails session 内容。

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

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

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

如果我在 production.rb 中将整个应用程序的 Session 配置为

 :expire_after =>  24.hours 

然后它会工作...但问题是我想有选择地控制 session cookie 上的过期日期。

编辑:事实证明,当我设置 session[:expires_at] 时对 cookie 的范围没有影响的原因是因为后续请求破坏了 session cookie 并将其重置回 session .仍然不确定该怎么做。

最佳答案

也许不依赖于 cookie 过期(请参阅 "Ruby On Rails Security Guide" 中的第 2.9 节了解它为什么不好),类似于 this answer ,在 session 本身中创建 session 时存储时间戳(比如 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

关于ruby-on-rails - 基于 Rails cookie 的 session : mixing session scope with expiration times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com