Ajaxで非同期通信時にセッション操作ができない問題(PHP)

経緯

・非同期通信に処理中プロセスが完了する前に、Ajaxで別のリクエストを送信。
・セッションの読み込みはできるが、書き込みやクリアができない。

原因

・session_start()呼び出し後、明示的にsession_write_close()を呼び出さないと、
 そのプロセスが完了するまでセッションファイルがロックされてしまい、書き込みができない。

解決方法1 session_write_close()を呼び出す

プロセス内でセッションの利用を行わなくなるタイミングでsession_write_close()を呼び出し、プロセス完了を待たずにセッションのロックを解除する。
→ これは厳密には現象緩和の可能性はあるが、根本的な解決にはならない。
 (session_write_close()呼び出し前にそもそも他のプロセスがセッション操作するようなら意味ないよね)

解決方法2 ロジックを変える。

→ これが一番の解決。処理によっては難しいかもしれないけど・・・

unset()関数呼び出してるのにセッション消えなくてずっと悩んだ・・・

シェアする

  • このエントリーをはてなブックマークに追加

フォローする