PHPはシェアードナッシング環境で実行されます。つまり、このコンテキストでは、すべてのWebリクエストがクリーンな環境で実行されます。別の永続層(ファイルシステム、データベースなど)を経由しない限り、別のリクエストのデータにアクセスすることはできません。
Ruby on Railsはどうですか?別々のリクエストが同じクラス変数にアクセスする可能性があると述べているブログ投稿を読んだばかりです。
これはおそらくWebサーバーに依存していると思いました。 MongrelのFAQには、Mongrelはリクエストごとに1つのスレッドを使用すると記載されており、シェアードナッシング環境を示唆しています。FAQには、RoRはスレッドセーフではないと記載されています。これは、新しいリクエストが前のリクエストから作成されたメモリ内オブジェクトを再利用しない限り、RoRが共有環境に存在しないことをさらに示唆しています。
明らかに、これにはセキュリティに大きな影響があります。だから私は2つの質問があります:
- RoR環境は共有されていますか?何もありませんか?
- RoRが共有環境で実行されている(または状況によっては実行される可能性がある)場合、どの変数やその他のデータストレージについて心配する必要がありますか?
更新:さらに明確にします。 Javaサーブレットコンテナでは、複数のリクエストにまたがって存続するオブジェクトを持つことができます。これは通常、複数のユーザーがアクセスできるデータのキャッシュ、データベース接続などのために行われます。PHPでは、これはアプリケーションレイヤーでは実行できず、Memcachedなどの別の永続レイヤーで実行する必要があります。したがって、2つの質問は次のとおりです。RoRはどのシナリオ(PHPまたはJava)に似ていますか、Javaのように、どのデータ型が複数の要求にわたって持続しますか?