PHP работает в среде без общего доступа, которая в этом контексте означает, что каждый веб-запрос выполняется в чистой среде. Вы не можете получить доступ к другим данным запроса, кроме как через отдельный уровень сохранения (файловая система, база данных и т.д.).
Как насчет Ruby on Rails? Я просто прочитал сообщение в блоге, в котором говорится, что отдельные запросы могут обращаться к одной и той же переменной класса.
Мне пришло в голову, что это, вероятно, зависит от веб-сервера. Mongrel FAQ утверждает, что Mongrel использует один поток для каждого запроса, предлагая среду с общим доступом. В ЧаВо часто говорится, что RoR не является потокобезопасным, что также предполагает, что RoR не будет существовать в общей среде, если новый запрос не повторно использует объекты в памяти, созданные из предыдущего запроса.
Очевидно, что это имеет серьезные последствия для безопасности. Поэтому у меня есть два вопроса:
- Является ли среда RoR shared-nothing?
- Если RoR запускается (или может работать при некоторых обстоятельствах) совместно используемой среде, какие переменные и другое хранилище данных я должен быть параноидальным?
Обновление: я уточню подробнее. В контейнере сервлетов Java вы можете иметь объекты, которые сохраняются в нескольких запросах. Обычно это делается для кэширования данных, к которым у нескольких пользователей будет доступ, к соединениям с базой данных и т.д. В PHP это невозможно сделать на уровне приложения, это должно быть сделано в отдельном уровне сохранения, таком как Memcached. Таким образом, возникает двоякий вопрос: какой сценарий похож на RoR (PHP или Java) и, если он похож на Java, какие типы данных сохраняются в нескольких запросах?