【问题标题】:Storing state across requests from the same user跨来自同一用户的请求存储状态
【发布时间】:2013-08-01 23:02:43
【问题描述】:
我了解状态可以跨 cookie 和 session[] 哈希存储。
以下哪项可用于存储来自同一用户的 ACROSS 请求状态?选择所有适用的。
- Cookie
-
session[] 哈希
- 由控制器方法设置的实例变量
- 由控制器方法设置的类变量
这个测验问题的答案是 (1) 和 (2)。我的问题是:为什么 (3) 和/或 (4) 不能跨来自同一用户的请求存储状态?
【问题讨论】:
标签:
ruby-on-rails
ruby
controller
session-state
【解决方案1】:
(3) 不能跨请求存储状态。每次请求进入您的 Rails 应用程序时,都会创建一个控制器实例并在其上调用相应的操作方法。处理完请求后,控制器实例将被丢弃,并为下一个请求创建一个新实例。
(4) 技术上可以跨请求存储状态,但无论哪个用户发出请求,数据都将在控制器的所有实例之间共享。它也无法从其他控制器访问,如果服务器重新启动,它会丢失,并且如果您的 Rails 应用程序的多个实例同时运行(在生产场景中很常见),类变量的内容将不会在它们之间共享。
详细说明为什么这种事情是个坏主意:https://stackoverflow.com/a/1029798/742690