PHP 在无共享的环境中运行,在这种情况下,这意味着每个 Web 请求都在干净的环境中运行。除非通过单独的持久层(文件系统、数据库等),否则您无法访问其他请求的数据。
Ruby on Rails 怎么样?我刚刚阅读了一篇博文,指出单独的请求可能会访问同一个类变量。
我突然想到这可能取决于 Web 服务器。 Mongrel 的常见问题解答指出,Mongrel 每个请求使用一个线程 - 建议使用无共享环境。FAQ 继续说 RoR 不是线程安全的,这进一步表明 RoR 不会存在于共享环境中,除非新请求重用从先前请求创建的内存中对象。
显然,这具有巨大的安全影响。所以我有两个问题:
- RoR 环境是无共享的吗?
- 如果 RoR 在共享环境中运行(或可能在某些情况下运行),我应该对哪些变量和其他数据存储感到偏执?
更新:我会进一步澄清。 在 Java servlet 容器中,您可以拥有跨多个请求持续存在的对象。这通常用于缓存多个用户可以访问的数据、数据库连接等。在 PHP 中,这不能在应用程序层完成,它必须在像 Memcached 这样的单独持久层中完成。因此,双重问题是:哪种场景是 RoR(PHP 或 Java),如果是 Java,哪些数据类型在多个请求中持续存在?