5

我有一个 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 类(或其他地方)中,只有在请求不是自动化的情况下才能有条件地分配会话?我担心在执行控制器处理程序之前可能需要会话配置数据。我会将会话键值的分配放在哪里?

提前感谢您的帮助。

4

2 回答 2

1

config/initializers 是一次性配置,它们通常只在启动时运行一次。根据文档,只有在请求期间触摸“会话”对象时,延迟加载才会初始化会话。

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

于 2009-09-16T10:34:51.037 回答
0

抱歉“迟到”的答案,但我认为这与登陆这里的人有关。自从session :off从 Rails 中删除后,就一直在为类似的问题而苦苦挣扎。

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

于 2011-06-06T11:19:05.220 回答