0

PHP で部分的に継承された Web アプリケーションがあり、Fiddler をいじった後、以前よりも少し多くのデータがあります。私が解決しようとしている問題は、IE6/8 での不要なログアウトですが、FF/Chrome ではありません。ユーザーが別のページをクリックすると、ログイン データの Cookie は消えます。

動作は FF と IE で異なり、報告される情報は Fiddler(/IE) と Live HTTP Headers(/FF) でほぼ同じように異なります。

Firefox では、Cookie は PHP で指定されているように処理されているように見えます。Cookie は、ユーザーがログインして「Remember me」をチェックしたときに作成され、ユーザーがログアウト ページにアクセスした場合にのみ削除され、有効期限は 2 週間です。ライブ HTTP ヘッダーは何も報告しません。ユーザーがページ間をクリックしたときに、Cookie が変更または削除されたと報告されることはありません。

しかし IE では、ユーザーが別のページをクリックすると消え、Fiddler はレポートします。

クッキー / ログイン
    Set-Cookie: ********=削除済み; expires=Sun, 29-Jun-2008 21:07:46 GMT; パス=; ドメイン=.********.com
    Set-Cookie: ********=削除済み; expires=Sun, 29-Jun-2008 21:07:46 GMT; パス=; ドメイン=.********.com

('deleted' は、文字通り Fiddler の出力から引用されています。私のコードには、いずれかの値が 'deleted' のマジック ストリングに設定されている場所はありません。)

IE と Firefox では、サイトのメッセージの解釈が異なるだけでなく、Fiddler と HTTP ライブ ヘッダーは、それに応じてサイトの動作の異なるバージョンを報告します。

IE と「削除済み」について何か特別なことはありますか? これは奇妙に聞こえるかもしれませんが、IE は各ページ ビューなどで Cookie を再度有効にすることを望んでいるのでしょうか。

また、ユーザーがログアウト URL にアクセスして要求しない限り、問題の Cookie がサーバーによって削除されないように IE を緩和するにはどうすればよいですか?

4

3 に答える 3

3

私が最終的に見つけたのは次のとおりです。Firefox と IE は、設定されていた Expires: ヘッダーで不足しているドキュメントが 14 日以内にあった場合、キャッシュの扱いが異なるため、動作が異なりました。

Firefox は明らかに欠落しているデータを 1 回チェックし、それを再度要求していませんでした。

一方、IE は、スタイルシートが間違ったパスを与えたアイテムをチェックし続け、404 ページを取得し、カスタム 404 ページは、ログインするためのボイラープレートの招待を行い、ユーザーのログアウトを引き起こしました (おそらく、最良のボイラープレートではありません)。 )。スタイルシートはキャッシュされていたと思いますが、IE は欠落しているアイテムを要求し続けました。

したがって、キャッシュの違いと間接的な包含、および 404 ページの動作でした。

「削除」が何から来たのかはまだわかりません。(Cookie 文字列を空の値に設定した場合、PHP は「deleted」という単語を提供しますか?)

于 2009-07-02T21:41:47.267 に答える
2

ホストにアンダースコアが含まれている場合、IE は Cookie を設定しませんが、ここでは問題ではありません。

Fiddler は何も「発明」していません。Cookie を値「削除」に設定する HTTP ヘッダーを取得したと言う場合、それはサーバーが文字通りそれを送信したことを意味します。

サーバーが Cookie を削除する原因となっている誤った要求がネットワーク上に送信されているかどうかを確認することをお勧めします。たとえば、別のスレッドで、ソースが "" (空の文字列) の IMG タグにより、IE がサイトのルートへのリクエストを送信し、そのホームページにアクセスするとログイン Cookie が削除されることが指摘されました。

IE6/7/8 には現在、ホストごとに 50 個の Cookie の制限がありますが、ここでヒットしているものでもありません。

于 2009-07-02T03:50:23.977 に答える