[PHP x Ajax] 非同期でセッションを複数処理する場合の注意点

カテゴリ: jQuery, PHP

記事投稿日: 2016年11月14日



発生した問題点:

  • 時間のかかる非同期処理を実行 -> その処理が終了する前に画面遷移
  • 画面遷移後、セッションを更新していると、前の画面の処理が終わった瞬間、セッション情報が古くなってエラーが発生
    • どうやら、非同期処理で実行した処理が、バックで動き続け、画面遷移した後で終了したタイミングで上書きされる模様

セッションを使わずに処理を行うようにしたりとか、色々試しましたが、根本的な原因は「セッション処理は常に1つずつ」行われ、実行中はロックされるということ。

下記の記事が参考になりました。ありがとうございました。

「【ajax】複数のajax送信を同時に行ってPHPのセッションを扱うときの注意点」

「phpでajaxとsessionを使う時の注意点:なんとなしの日記」

対応策

「session_write_close」を使うこと。

  • 現在のセッションを終了し、セッションデータを書き込む
  • セッションは同時書き込みを防ぐため、スクリプトの終了まではロックされる
    • セッションの処理ができるのは、常に1つだけ
  • セッションの変更後にすぐにセッションを終了することで、ロック待ちによる遅延を防ぐことができる

過去に非同期で複数の処理を取得しようとして、遅延が発生していた件が思い当たりました…。これでしたか……。
非同期なのに、どうして遅くなるのか不思議でした。

問題のスクリプトのエラーは発生しなくなりました。
原因が分かりましたので、今後は積極的に利用していこうと思います。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA




トップに戻る