1

さて、私は最も奇妙な問題を抱えています。(警告:前方のテキストの壁)

私は自分の変数を追跡して$_SESSIONいます。これは、ユーザーがAJAXを介してクリックしたタブに応じて異なる数値に設定されています。便宜上、ターゲットサイトでその変数を設定して、確実に設定されるようにします(JSが有効になっていない人や同様の問題の場合)。

正常に動作するすべてのブラウザで。今私はIEでテストしていて、ターゲットサイトで値のあるタブの別のリンクをクリックするとすぐに2、値はにリセットされ0ます。他のすべてのタブ(可能な値は0、もちろん、15つのタブがあるため)は正常に機能します。234

ターゲットサイトでの便利な割り当てをコメントアウトすると(すべてのターゲットサイトにそのbtwがあります)、タブ2も突然機能します。これをデバッグすると、ターゲットサイトが値をint(2)からint(2)...に設定することが示されましたが、実際の変更は発生しませんでした(ただし、この変更されていない変更を削除すると修正されます)。

ここで問題と
なるのは、InternetExplorerが完全にすばらしいphpセッションを台無しにするために何をしているのかということです。

プロジェクト全体を複数回チェックし、プロジェクトの大部分をデバッグしてこの問題の原因を見つけましたが、何も見つかりませんでした。値が設定されているのは3行だけです。

  1. セッションオブジェクトは初めて作成され、値を取得します0
    これを確認しましたが、実際にはセッションの作成時にのみ呼び出されます。(私は、それが呼び出された場合にどこかに表示されるはずのエコーで線を囲みましたが、そうではありませんでした)

  2. AJAX呼び出しセットの受信メソッドは、から読み取るものすべての値になります$_GET。これは機能し、ターゲットサイトにリダイレクトするため
    のフォローを存続させます。window.location.href="..."

  3. ターゲットサイトで、JavaScriptが有効になっていないユーザーに値が設定されていることを確認します。
    デバッグではこれまでに間違った動作は見られませんでしたが、これは厄介なところのようです。

2何らかの理由でシリアル化がシリアル化に失敗していないかどうかも確認しましたが、セッションファイルをチェックインすると、タブをクリックしてページを変更した後、/var/lib/php5完全に正常で適切に設定されていることがわかりました。2

セッションの初期化をデバッグすると(session_start()シリアル化されたオブジェクトがウェイクアップルーチンを実行した直後と直後の両方で)、値が0次のサイト要求にあることがわかりました(明らかにタブをクリックしてターゲットサイトにリダイレクトされた後)。だから私はそれが逆シリアル化をderpingするphpの問題になるだろうと思った。そこで、テスト用に別のプロパティを作成し、そこに保存し2て数回ロードすると、常にとしてロードされ2ます。さらに、私がテストした他のブラウザ(FirefoxとChrome)には、タブ2で問題はありません...したがって、愚かなことをしているphpも無効になっています。

私の頭に浮かんだAnthoerのアイデアは、このようなCookieやジョークを忘れるのが好きなIEの面白いプライバシーに関するものだったので、すべてのページとAJAXリクエストでセッションIDを追跡しました。
それは決して変わらなかった。したがって、デフォルト値がの新しいセッションオブジェクトを取得すること0も無効になります。さらに、他のタブはIEで機能します。

最後に、AJAXのすべてのことを行うjavascriptのものをチェックしました。まったく同じコードが3つのタブすべてで実行されるため、失敗する本当の理由はありませんが、2とにかく実行しました。
そして、私が予想したように、そこにも何も問題はありませんでした。すべての呼び出しは適切に実行され、サーバーから適切な応答を取得して作業を続行しました。

今のところ、チェックまたはデバッグするために何が残っているのかわかりません。IEが、リクエスト間でサーバー上のファイルに格納されているサーバー側の変数をどのように操作できるのかさえわかりません。
私はそれがIEに関係しているに違いないことを知っています。なぜなら、それが私のサーバーサイドプログラミングの間違いだった場合、他のブラウザーでもその影響が見られるからですよね?

誰かがこれをデバンキングするために私が他に何をしようとすることができるかについて何か考えを持っていますか?


そしてもちろん、これが私が使用しているソフトウェアともののすべての仕様です:

VirtualBoxゲストとしてのWindows732ビット上のInternetExplorer9.0.8112.16421(バグが存在する)
実マシン上のWindows 764ビット上のInternetExplorer9.0.8112.16421(バグが存在する)実マシン
上のFedora 17x64上のFirefox16.0.2(バグが存在しない
実際のマシン上のWindows764ビット上のFirefox16.0.1(バグは存在しません
Chrome?(約2週間前にインストールされました)実際のマシン上のWindows 7 64ビット(バグは存在しません
) Android2.3.3上のOperaMobile 12.10.ADR-1211271253(バグは存在しません

サーバーは、カーネル2.6.32-5-amd64を実行しているDebian6上のPHP5.3.3-7を備えたApache2.2.16です。


2012年12月3日更新:

どうやらそれはターゲットページに埋め込まれたフラッシュビデオと関係があります。他のタブの1つのターゲットページに配置することで、他のタブでも問題を再現できるようになりました。

また、ロードされたビデオでのみ発生するようです。オーディオファイルはバグを引き起こしません。

関係するjavascriptコードは埋め込みを追加するだけなので、少し不思議です。問題のプレイヤーはNonverblasterで、これは無料で、これまで問題はありませんでした。

どうやらそれはまたhttp://code.google.com/p/swfobject/を利用しています。

フラッシュプレーヤーをアンインストールするとバグもなくなりますので、間違いなくこのビデオプレーヤーと関係があります。.swfファイルと.flvファイルのロードはphpセッションとは何の関係もないので、それがどのように行われるかはまだわかりませんが、どういうわけかそれは行われているようです。

4

1 に答える 1

2

IEがサーバーに.swfを要求しても、セッションCookieは送信されないようです。これにより、サーバーによってCookieが再生成されます。

いくつかの関連する議論-

ほとんどのソースは、サーバーがフラッシュコンテンツのロードに関連するリクエストを識別し、それを元のセッションに含めることが解決策であることに同意する傾向があります。または、少なくとも新しいセッションが作成されないようにします。

于 2012-12-03T13:51:16.293 に答える