5 session lazy-loading ruby-on-rails
我有一个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
Run Code Online (Sandbox Code Playgroud)
因此,在正常操作期间,我们看到在数据库中为每个会话创建的ActiveRecord对象.问题是我们并不总是想为请求创建会话 - 我们希望能够关闭自动请求的会话创建.我们在数据库中看到数千个会话记录,每个自动请求一个.在rails 2.3.3之前,可能存在以下情况:
class ApplicationController < ActionController::Base
session :off
...
end
Run Code Online (Sandbox Code Playgroud)
但现在在rails 2.3.3中"session:off"已被弃用,因为会话现在是延迟加载的 - 如果你不使用它们,它们就不会被创建.问题似乎是会话对象始终在sessionstore.rb文件中分配,因此始终创建.如果从配置文件中删除会话分配块,则在自动请求后不会显示会话记录.我的问题是,如何将配置分配移出session_store.rb并进入ApplicationController类(或其他地方),只有在请求不是自动化的情况下才可以有条件地分配会话?我担心在执行控制器处理程序之前可能需要会话配置数据.我在哪里可以分配会话密钥值?
在此先感谢您的帮助.
配置/初始化程序是一次性配置,它们通常仅在启动时运行一次。根据文档,只有在请求期间触及“会话”对象时,延迟加载才会初始化会话。
您确定在请求周期中根本不触及会话变量吗?(即在过滤器、操作、帮助器或模板中)。另外,会话对象是否有一些内容可以提示您它们的创建位置?
| 归档时间: |
|
| 查看次数: |
3086 次 |
| 最近记录: |