在同一用户的请求之间存储状态

时间:2013-08-01 23:02:44

标签: ruby-on-rails ruby controller session-state

我知道状态可以存储在cookie和session[]哈希值中。

  

以下哪项可用于存储来自同一用户的状态ACROSS请求?选择所有适用的选项。

     
      
  1. 缓存
  2.   
  3. session[]哈希
  4.   
  5. 由控制器方法设置的实例变量
  6.   
  7. 由控制器方法设置的类变量
  8.   

这个测验问题的答案是(1)和(2)。我的问题是:为什么(3)和/或(4)不能在同一用户的请求中存储状态?

1 个答案:

答案 0 :(得分:7)

(3)无法跨请求存储状态。每次请求进入您的Rails应用程序时,都会创建一个控制器实例,并在其上调用相应的操作方法。处理完请求后,控制器实例将被丢弃,并为下一个请求创建一个新实例。

(4)可以在技术上跨请求存储状态,但无论哪个用户发出请求,数据都将在控制器的所有实例之间共享。它也无法从其他控制器访问,如果重新启动服务器就会丢失,并且如果Rails应用程序的多个实例同时运行(在生产方案中很常见),则不会在它们之间共享类变量的内容。

详细说明为什么这类事情是个坏主意:https://stackoverflow.com/a/1029798/742690