2

カスタム セッション ハンドラを作成する際に従うべきベスト プラクティスは何ですか? 私は既存の PHP フレームワークのほとんどを調べてきましたが、それらのほとんどは、セッション ID の更新を処理する際の同時実行性と複数の ajax リクエストに問題があるようです。デフォルトの PHP セッションはファイル ロックを使用してこれを管理しますが、たとえば mysql を使用してセッションを保存している場合、これを行う適切な方法がないようです。この問題を解決する最善の方法は何でしょうか? どんな助けでも感謝します。

4

1 に答える 1

1

セッションファイル/別のストレージ行をロックしないと、データが失われる可能性があります。

単純なシナリオ(ロックを完全に解除したと仮定):

初期状態:2つのajaxリクエストが同時に実行されているページがあり、それぞれがセッションに別のキーを追加します。

  1. リクエストAが送信されました
  2. リクエストBが送信されました
  3. スクリプトAはセッションをメモリに読み取りますが、空です
  4. スクリプトBはセッションをメモリに読み取りますが、空です
  5. スクリプトAは、キーAをセッションに追加します。現在、単一のAキー(メモリ内)が含まれています
  6. スクリプトBは、キーBをセッションに追加します。現在、単一のBキー(メモリ内)が含まれています
  7. スクリプトAはデータを永続化します
  8. スクリプトBはデータを永続化します

結果:キーが失われます

したがって、セッション内のデータの一貫性を保証したい場合は、同期メカニズムが必要です。これは、たとえば、悲観的なロックである可能性がありますが、それでも、ロックを完全に回避することはできません。

于 2012-12-28T11:12:53.143 に答える