2

会社用に作成しているデモ サイトで、IE 固有の ajax ログイン ステータス リクエストの問題が発生しています。

すべての Internet Explorer ブラウザー (7-9) でこの問題が発生しますが、他のすべてのブラウザーではチャンピオンのように機能します。

ログインに成功すると、ユーザーはランディング ページにリダイレクトされ、ログイン ステータス リクエストが開始されます。

このログイン ステータス リクエストが「1」以外で返された場合、ページはログイン ページにリダイレクトされます。

開発者ツールでトラフィックをたどると、その特定のステータス チェックのリクエストが 304 Not modified になり (発生しないはずです)、リクエストの本文が EMPTY と表示されることがわかります。(常に 0 または 1 を返します)...

そのチェックインを含むページのハード リフレッシュ (CTRL-F5) を実行すると、ブラウザから 304 が返されます。

フィドラーでこれらの 304 を追跡すると、そのログイン ステータス URL に対するネットワーク経由のリクエストさえないことが示されます。BROWSER ITSELF は 304 を想定しており、リクエストの送信に失敗しています。

URL に直接アクセスすると、応答は常に 200 で、適切な 0 または 1 が期待されますが、ajax されると、ほとんどの場合 304 であり、サーバーから 304 を確認するためにネットワーク経由で送信することはありません。

ブラウザの履歴をクリアしても、304 が 200 に変更されるかどうかには影響がないようです。

二重に奇妙なのは、10回ほど試行するたびに、これは実際に機能し、リクエストは実際の応答で200を返しますが、ほとんどの場合、応答なしで304が返され、値はキャッシュされた値で1と等しくなりません(それが何に相当するのかわからない?!)

このリクエストへのレスポンスを変更して、php によって次のヘッダーが生成されるようにしました。

header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Expires: -1');

IE で直接 URL にアクセスすると、これらのヘッダーは存在しますが、304 が発生した場合は存在しません。

あたかも IE がその特定の要求を積極的に無視しているかのようです...

何か案は?

繰り返しますが、これは文字通り他のすべてのブラウザで動作しますが、さまざまなフレーバーのIEです。

4

1 に答える 1

4

ステータスリクエストのURLにランダムなクエリ文字列パラメータを追加してみてください。お気に入り:

'/your/url?breakcache='+Math.random()
于 2011-06-08T22:05:18.880 に答える