カスタム セッション ハンドラを作成する際に従うべきベスト プラクティスは何ですか? 私は既存の PHP フレームワークのほとんどを調べてきましたが、それらのほとんどは、セッション ID の更新を処理する際の同時実行性と複数の ajax リクエストに問題があるようです。デフォルトの PHP セッションはファイル ロックを使用してこれを管理しますが、たとえば mysql を使用してセッションを保存している場合、これを行う適切な方法がないようです。この問題を解決する最善の方法は何でしょうか? どんな助けでも感謝します。
1 に答える
1
セッションファイル/別のストレージ行をロックしないと、データが失われる可能性があります。
単純なシナリオ(ロックを完全に解除したと仮定):
初期状態:2つのajaxリクエストが同時に実行されているページがあり、それぞれがセッションに別のキーを追加します。
- リクエストAが送信されました
- リクエストBが送信されました
- スクリプトAはセッションをメモリに読み取りますが、空です
- スクリプトBはセッションをメモリに読み取りますが、空です
- スクリプトAは、キーAをセッションに追加します。現在、単一のAキー(メモリ内)が含まれています
- スクリプトBは、キーBをセッションに追加します。現在、単一のBキー(メモリ内)が含まれています
- スクリプトAはデータを永続化します
- スクリプトBはデータを永続化します
結果:キーが失われます
したがって、セッション内のデータの一貫性を保証したい場合は、同期メカニズムが必要です。これは、たとえば、悲観的なロックである可能性がありますが、それでも、ロックを完全に回避することはできません。
于 2012-12-28T11:12:53.143 に答える