我有一个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类(或其他地方),只有在请求不是自动化的情况下才可以有条件地分配会话?我担心在执行控制器处理程序之前可能需要会话配置数据。我在哪里可以分配会话密钥值?
提前感谢您的帮助。
答案 0 :(得分:1)
配置/初始化程序是一次性配置,它们通常在启动时只运行一次。根据文档,如果在请求期间触摸了“会话”对象,延迟加载将仅初始化会话。
您确定在请求周期中根本没有触摸会话变量吗? (即,在过滤器,操作,帮助器或模板中)。此外,会话对象是否有一些内容可以提示您创建它们的位置?
答案 1 :(得分:0)
对不起“迟到”的答案,但我认为与登陆这里的人有关。
自session :off
从Rails中删除以来,我一直在努力解决类似的问题。
我决定将Rails 2.3+作为插件“后端”移植https://github.com/kares/session_off