5

我知道状态可以跨 cookie 和session[]散列存储。

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

  1. 饼干
  2. session[]哈希_
  3. 由控制器方法设置的实例变量
  4. 由控制器方法设置的类变量

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

4

1 回答 1

8

(3) 不能跨请求存储状态。每次请求进入 Rails 应用程序时,都会创建控制器实例并在其上调用适当的操作方法。一旦处理了请求,控制器实例就会被丢弃,并为下一个请求创建一个新的实例。

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

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

于 2013-08-01T23:27:10.550 回答