状況:
PHP/MySQL/Zend Framework 1.12 バックエンドと通信する Javascript/jQuery Web アプリがあります。Web アプリは iFrame 内で実行されます (iframe モードの jQuery fancybox で読み込まれます)。
アプリケーションはバックエンドでオブジェクトを作成し、現在のセッション ID を一緒に保存します。次に、オブジェクトのプロパティをフロントエンドに表示し、ユーザーがアプリケーションと対話するときに ajax 呼び出しを介してバックエンドでオブジェクトを変更します。セッション ID は、ajax リクエストが同じユーザーから来ているかどうかを確認するために使用されます (ユーザーはログインしていないため、確認する唯一の方法です)。
jQuery を使用して ajax 呼び出しを行い、Zend_Session を使用して PHP/Zend のセッションを操作します。
問題:
問題は、safari 6 では、これらの ajax リクエストのセッション ID が異なるため、バックエンド モデル オブジェクトに保存されているセッション ID と一致せず、アクセスが拒否されることです。
これは iframe で実行している場合にのみ発生し、他のブラウザーではなく、他のバージョンの safari (5 以下) では発生しません。
これを引き起こす原因と対処方法を知っている人はいますか?
いくつかの詳細情報:
アプリケーション全体が iframe で実行され、セッション ID がバックエンド モデルにも格納される呼び出しから実行されます。したがって、これらの呼び出しはすべて同じセッション ID を持っていると思います。
別のこと: アプリケーションを別のタブで実行し、iframe で再度実行すると、問題はなくなります。それ以降、ブラウザー セッションを強制終了するまで、期待どおりに毎回同じセッション ID を取得します。率直に言って、それは私にはバグのようなにおいがします。