4

我们面临一个奇怪的问题,在我们的 rails 3.2 应用程序(暂存环境)的会话中,很少有键/cookie 被删除/丢失,该应用程序具有以下缓存设置/配置。session store是cookie store,配置如下:

    Appsrv::Application.config.session_store :cookie_store, {
      :key =>           'SSID',
      :path =>          '/',
      :domain =>        APP_CONFIG['site_url'].sub(/^https?:\/\//, ""),
      :expire_after =>  30.minutes,
      :secret =>        's23asdfe443534afdgstreggv234324we434',
      :secure =>        false # cookie not for just https
   }

rails cache store 是一个memcache store,我们使用dalli gem 来集成rails 和memcache。

以下配置已添加到不同的 .rb 文件中:

    config.cache_store = :dalli_store, 'staging01:11211', 'staging02:11211',  'staging03:11211', 'staging04:11211'
                     {:namespace => "appsrv", :expires_in => 86400, :compression => true}  
    config.action_controller.perform_caching = true

不过,这种丢失 cookie 的情况发生的流程有点复杂。发生这种情况的场景如下:

  1. 用户通过访问 Appsrv 上的页面启动会话(rails 3.2 应用程序,此时在会话中设置了一些标识用户事务的变量)
  2. 转到外部网站进行身份验证。
  3. 认证成功后,外部网站重定向到 Java App 服务器。
  4. Java App 服务器记录身份验证并重定向回 Appsrv。
  5. 但是在此重定向之后,步骤 1 中设置的会话变量消失了。

一些奇怪的发现:事情在开发环境中完美运行,唯一的区别是:

    config.action_controller.perform_caching = false

如果我们在暂存“config.action_controller.perform_caching=false”中有相同的设置,那么暂存也可以正常工作。即使“config.action_controller.perform_caching”设置为 false,缓存实际上在控制器和模型中正确发生。

所以问题是: 1. 当 config.action_controller.perform_caching 设置为 true 时,为什么会话 cookie 会被删除?2. config.action_controller.perform_caching 配置如果设置为 false 也允许缓存正常发生有什么意义?

4

0 回答 0