6

我在使用会话变量时遇到问题。我有两个名为“graduate_students_controller”和“current_students_controller”的控制器。这些控制器中的每一个都控制不同的视图文件。我在这两个控制器中使用会话变量来存储会话信息。

这就是问题所在。假设我有两个视图文件“reports/current_students_list”、“reports/graduate_students_list”,每个文件都由上述控制器单独控制。

现在,如果我尝试从同一个浏览器中打开这两个网页并尝试同时使用它们,我会从第一次加载的页面中收到“nil object access”错误。'nil object' 指的是第一页应该访问的会话变量。但是,当我单独使用这两个 Web 应用程序中的任何一个时,它们都可以正常工作。

所以在我看来,第一个加载的网络应用程序的会话变量。被第二个加载的网络应用程序覆盖。也许是因为第二页在第一页上存储了一个新的 cookie?

我该如何解决?

任何建议都非常感谢。

再澄清一点:这两个控制器属于同一个 Rails 应用程序。而且我没有在两个控制器中使用相同的会话变量名称。所以我不明白为什么它们会被覆盖

我是 Rails 新手,非常感谢您对这个问题的帮助。谢谢。

4

1 回答 1

5

我不确定您是否正在运行两个应用程序,或者是指同一应用程序下的两个控制器。如果您正在查看不同的 Web 应用程序,那么我认为您在环境中为这些应用程序中的每一个使用相同的名称和会话密钥。尝试更改 environment.rb 中的键值:

config.action_controller.session = { :key => "_myapp_session", :secret => "..." }

如果您在同一个应用程序中使用来自两个不同控制器的相同会话变量,那么您需要编写代码来适应这一点,但我不建议这样做。访问会话数据时,检查 nil 值:

session[:some_key].nil?

并确保公共代码(即在 application_controller.rb 中)不会覆盖您的值。

于 2009-07-13T08:49:33.540 回答