如何在rails 2.3.3中有条件地分配ActionController :: Base.session

我有一个rails应用程序,在config / initializers / session_store.rb文件中包含以下内容:

ActionController::Base.session = { :key => '_app_session', :secret => 'a really long string here', :expire_after => 2.minutes } ActionController::Base.session_store = :active_record_store 

因此,在正常操作期间,我们看到在数据库中为每个会话创建的ActiveRecord对象。 问题是我们并不总是希望为请求创建会话 – 我们希望能够关闭自动请求的会话创建。 我们在数据库中看到数千个会话记录,每个自动请求一个。 在rails 2.3.3之前,可能存在以下情况:

 class ApplicationController < ActionController::Base session :off ... end 

但现在在rails 2.3.3中“session:off”已被弃用,因为会话现在是延迟加载的 – 如果你不使用它们,它们就不会被创建。 问题似乎是会话对象始终在sessionstore.rb文件中分配,因此始终创建。 如果我从配置文件中删除会话分配块,则在自动请求后不会显示会话记录。 我的问题是,如何将配置分配移出session_store.rb并进入ApplicationController类(或其他地方),只有在请求不是自动化的情况下才能有条件地分配会话? 我担心在执行控制器处理程序之前可能需要会话配置数据。 我在哪里可以分配会话密钥值?

在此先感谢您的帮助。

配置/初始化程序是一次性配置,它们通常在启动时只运行一次。 根据文档,如果在请求期间触摸“会话”对象,则延迟加载将仅初始化会话。

您确定在请求周期中根本没有触摸会话变量吗? (即,在filter,操作,帮助器或模板中)。 此外,会话对象是否有一些内容可以提示您创建它们的位置?

对于“迟到的”答案感到抱歉,但我认为这对于登陆这里的人来说是相关的。 自session :off以来一直在努力解决类似的问题session :off从Rails中删除。

我决定将Rails 2.3+作为插件“反向移植”到https://github.com/kares/session_off