我知道状态可以存储在cookie和session[]
哈希值中。
以下哪项可用于存储来自同一用户的状态ACROSS请求?选择所有适用的选项。
- 缓存
session[]
哈希- 由控制器方法设置的实例变量
- 由控制器方法设置的类变量
醇>
这个测验问题的答案是(1)和(2)。我的问题是:为什么(3)和/或(4)不能在同一用户的请求中存储状态?
答案 0 :(得分:7)
(3)无法跨请求存储状态。每次请求进入您的Rails应用程序时,都会创建一个控制器实例,并在其上调用相应的操作方法。处理完请求后,控制器实例将被丢弃,并为下一个请求创建一个新实例。
(4)可以在技术上跨请求存储状态,但无论哪个用户发出请求,数据都将在控制器的所有实例之间共享。它也无法从其他控制器访问,如果重新启动服务器就会丢失,并且如果Rails应用程序的多个实例同时运行(在生产方案中很常见),则不会在它们之间共享类变量的内容。
详细说明为什么这类事情是个坏主意:https://stackoverflow.com/a/1029798/742690