PHP运行在共享无状态环境中,这意味着每个网络请求都在一个干净的环境中运行。 除了通过单独的持久层(文件系统、数据库等)之外,您无法访问另一个请求的数据。
那么Ruby on Rails呢?我刚刚读到一篇博客文章说,不同的请求可能会访问相同的类变量。
我想这可能取决于Web服务器。 Mongrel的常见问题解答指出,Mongrel使用一个线程处理一个请求 - 这表明它是一个共享无状态环境。 FAQ继续说RoR不支持线程安全,这进一步表明RoR不会存在于共享环境中,除非新请求重用从上一次请求创建的内存对象。
显然,这对安全性有巨大影响。所以我有两个问题:
- RoR的环境是否为共享无状态?
- 如果RoR在某些情况下运行在共享环境中(或可能),我应该对哪些变量和其他数据存储感到担心?
更新:我将进一步澄清。在Java Servlet容器中,您可以拥有跨多个请求持续存在的对象。 这通常是为缓存多个用户都可以访问的数据、数据库连接等而做的。 在PHP中,无法在应用程序层面完成这一点,必须在单独的持久性层(如Memcached)中完成。 因此,这两个问题是:RoR类似于哪种情况(PHP或Java),如果像Java,哪些数据类型会持续存在于多个请求之间?