[PHP-users 30554] Re: セッションをNFS経由で共有してみました。

Shu Sawada luna @ lunanet.gr.jp
2006年 10月 19日 (木) 00:05:27 JST


さわだです。

> 実際に運用されていてエンドユーザーが使っているWebサイトにおいて、
> 
>> やっていることは、サーバ1でセッションファイルを掴んでる間にサーバ2から呼ぶと
>> どうなるか、です。
> 
> というようなことは、エンドユーザー(orWebサイト管理者?)が
> どういう使い方をした場合に発生しうるのでしょうか?

僕が思うに、
たとえばwebサーバを2台配置し、全く同じコンテンツ・プログラムを公開します。
ラウンドロビンDNSとして、負荷分散的な設定をした場合、BIND的に言うと

www	IN	A	192.168.0.1
www	IN	A	192.168.0.2

(プライベートアドレスはグローバルに読み替えてください)

とすると、クライアントのブラウザは192.168.0.1または192.168.0.2にアクセスに行きます。
(これは、ローカルで nslookup www.yahoo.co.jp としてみるとわかると思います)
どちらのサーバを見に行くかは、これはクライアントの実装依存というか、定義できないと
思います。

この状態で、クライアントのブラウザが2本立ち上がっていた場合に、ブラウザ1で
サーバにリクエストを出した直後(ブラウザ1の応答が帰ってくる前)にブラウザ2から
サーバにリクエストを出すと、同時にセッションを参照するような状況が発生し得るように
思います。これが、先のメールの試験コードの意味合いになります。(…の、つもりです)

過去ログで言うと、この辺でしょうか。
http://ml.php.gr.jp/pipermail/php-users/2003-November/019519.html

----
ここで排他制御がなされていない場合、後に処理が終わった方のスクリプトの処理結果
のみがセッションに残ってしまい、先にリクエストされたほうのスクリプトの処理結果
がセッションに反映されない、というような状況が発生しないでしょうか?
また、後からリクエストされた方は、本来ならば先にリクエストされたスクリプトの
実行終了後のセッション状態を基に実行されるべきなのに、先にリクエストされた
スクリプトと同じ状態からセッションが開始されてしまうため、おかしなことに
なってしまうような気がします。

具体的に言うと、パッチを当てない状態で先のスクリプトを実行すると、両方とも
同じ数字が表示されてしまうのですが、それだと悲しい気がします。
----

説明わかりずらくてすみません。

-- 
Shu Sawada
http://luna.lunanet.gr.jp/
http://www.cycleof5th.com/


PHP-users メーリングリストの案内