同じ session id を使用する、ということは、1台のコンピュータから同じブラウザを使って web アプリケーションにアクセスする、ということですから、通常ならユーザが複数のウィンドウを開くか、フレームを使用したデザインでないと、同時アクセスは起きませんでした。
しかし Ajax を使うようになると、一つのウィンドウから複数のサーバアクセスが同時に発生することがよくあります。
私のアプリケーションでも、複数の Ajax アクセスが一つずつにしか実行されないという現象が起きて、なんでかな〜と思ったらこのセッションが原因でした。
session_write_close() を呼び出してやらないと、sesson_start()して(session.auto_start がセットされていればリクエスト開始時)から、スクリプトの実行が終了するまで、セッションデータがロックされてしまいます。
うちのアプリケーションの場合、セッションデータの変更を行う箇所はある程度絞れたのですが、コードのあちこちで読み出しています。PHPマニュアルの session_write_close() の項を見ると、
session_write_close -- セッションデータを書き込んでセッションを終了するとあります。ということは session_write_close() を実行した後はセッションデータが必要になるたびに sesson_start() しなければならないのでしょうか?
この辺のドキュメントが見つからなかったので、試してみました。すると、一旦 session_start() して session_write_close() した後でも、セッションデータは $_SESSION['xxx'] で利用することができました。(もちろん、その後の変更は保存されません)
ということで、うちのアプリケーションの場合は、セッションデータの書き換えが終わったらすぐに session_write_close() することにより、複数の Ajax アクセスに対するレスポンスをかなり改善することができました。