【发布时间】:2016-07-17 14:48:34
【问题描述】:
在我们的 Rails 4.2 应用程序中,模块的应用程序控制器中的方法 view_handler 使用 session 变量获取 nil。代码结构如下:
class my_module < ApplicationController
def view_handler
#access session[:page_step] which is defined in controller.
end
end
会话使用默认 cookie 存储:
Rails.application.config.session_store :cookie_store, key: '_my_app_session'
我们验证这不是scope 问题,因为当view_handler 移动到主应用程序的application controller 时问题仍然存在。
在使用application controller 进行调试时,session 对象存在但具有nil 值:
>session.present? #false
>session.nil? #true
>session[:page_step] #nil
这是调试中的session 对象。保存应用定义的会话变量的@delegate 为空:
同样在调试中,session[:page_step] 在controller 操作的后期再次出现。不知何故,session[:page_step](和其他会话变量)在application controller 中变为nil,并在controller 中重新出现。由于默认情况下application controller 中的session variables 在RAILS 中可用,是什么导致它们在application controller 中变为nil?
【问题讨论】:
-
也许this SO question 是相关的?
-
在我们的例子中,有很多会话变量被创建并存储在
session中。这不是同一个问题。 -
可能是 CSRF 问题:见 stackoverflow.com/a/18576525/1483788 ?
标签: ruby-on-rails session