【问题标题】:rails Session :cookie_store set expiration per basisrails Session :cookie_store 设置过期时间
【发布时间】:2014-10-16 09:35:13
【问题描述】:

我需要一个会话来保持 30 天(使用 rails 3.2,cookie store)。

我希望不要在 config.session_store 中设置全局配置,而是在设置会话变量时将其作为 on 选项传递,类似于如何设置 cookie 的过期时间。

这可能吗?

如果没有,我计划在全局范围内为所有会话设置 30 天的到期时间,并在需要时使用会话变量中的日期变量进行比较/销毁(但我宁愿不乱搞)。

【问题讨论】:

    标签: ruby-on-rails session ruby-on-rails-3.2


    【解决方案1】:

    如果您改用 cookie,您可以这样做:

    cookies[:foo] = { :value => "bar", :expires => 4.weeks.from_now }
    

    请参阅http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html 了解更多信息。

    我不知道有一种方法可以让可变会话到期,您可能必须手动完成。

    类似:

    def auth
      if session[:foo]
        reset_session if session[:last_seen] > 30.days.ago
        session[:last_seen] = Time.now
      end
    end
    

    【讨论】:

    • 是的,恕我直言,cookie 的安全性较低,但看起来我可能不得不使用 cookie 或推出自己的解决方案以全局过期。
    • 是的,我完全同意你的看法。滚动您自己并序列化您使用的任何密钥等。