首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Rails中动态设置基于cookie的会话的过期时间

如何在Rails中动态设置基于cookie的会话的过期时间
EN

Stack Overflow用户
提问于 2008-10-30 10:56:06
回答 6查看 12.8K关注 0票数 12

我目前正在为我的Rails应用程序使用基于ActiveRecord的会话存储,并且我有一个后台进程,它每30分钟清除一次不活动的会话。

我想切换到Rails的新的基于cookie的会话存储,但是我如何将会话的过期时间设置为30分钟,而不是默认的‘在会话结束时’值?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-28 17:24:49

在办公室的一次谈话中,我偶然发现了这个问题。为了完整起见,我发现可以在一段时间不活动后终止会话,这是Rails内置的。在config/environment.rb ment.rb中,执行类似以下内容的操作:

代码语言:javascript
复制
config.action_controller.session = {
  :key          => 'whatever',
  :secret       => 'nottellingyou',
  :expire_after => 30.minutes
}

请查看lib/action_controller/session/cookie_store.rb#114,了解该选项(显然没有文档)的实际应用。看起来自从2008年12月迁移到Rack sessions以来,它就已经存在了。

票数 15
EN

Stack Overflow用户

发布于 2008-10-30 17:54:22

理想情况下,您可能希望向environment.rb添加类似以下内容:

代码语言:javascript
复制
session :session_expires => 1.day.from_now

但这是行不通的,因为当应用程序启动时,代码只运行一次,因此第二天创建的所有会话都是在过去到期的。

我通常将session_expires设置为远在未来的某个时间(6个月)。然后在我的应用程序控制器上的before_filter中手动设置和检查session[:expires]日期,并在该日期过后重置会话。

这使得在登录时添加'Keep me logged for ___‘选项变得非常容易,你只需设置session[:expires] = Time.now + ___

票数 6
EN

Stack Overflow用户

发布于 2013-01-27 12:44:06

在经历了大量的痛苦和试验之后,可以在Rails3.x中找到,您需要在每个请求中的After过滤器中设置自定义会话参数

代码语言:javascript
复制
    class ApplicationController < ActionController::Base

      after_filter :short_session

      ...

      def short_session
        request.session_options = request.session_options.dup
        request.session_options[:expire_after] = 1.minute
        request.session_options.freeze
      end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/249797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档