Ajax (XHR) 呼び出しのサーバー側処理中に、Cookie を確実に設定または削除できますか?
-
01-07-2019 - |
質問
私自身、これについて少しテストを行ったところ (正確には、DWR フレームワークの Ajax リクエスト ハンドラーのサーバー側の処理中)、Cookie を正常に操作できるようですが、これは、私が Ajax のベスト プラクティスで読んだ内容の多くに反しています。ブラウザーが XmlHttpRequest からの応答を解釈する方法。私がテストしたことに注意してください:
- IE6および7
- Firefox 2 および 3
- サファリ
そして、すべての場合において、Ajaxリクエスト処理中のHttpServletResponseオブジェクトに対する標準のCookie操作はブラウザによって正しく解釈されましたが、Cookie操作をクライアント側にプッシュするのがベストプラクティスなのか、それともこの(よりクリーンな)サーバーなのかを知りたいです。サイドクッキーの処理は信頼できます。
DWR フレームワークに固有の回答と Ajax 一般的な回答を歓迎します。
解決
XMLHttpRequest は常に Web ブラウザの接続フレームワークを使用します。XHR オブジェクトがブラウザの Cookie プールにアクセスできない場合、ユーザーはログアウトされるため、これは AJAX プログラムが正しく動作するための要件です。
理論的には、Web ブラウザーがブラウザーの接続フレームワークを使用せずにセッション Cookie を共有することは可能ですが、これは (私の知る限りでは) 実際に起こったことはありません。Flash プラグインでも Web ブラウザの接続を使用します。
したがって、最終的には、AJAX 経由で Cookie を安全に操作できるようになります。ただ 覚えておいてください AJAX 呼び出しが決して行われない可能性があります。これらは保証されたイベントではないため、期待しないでください。
他のヒント
DWR の文脈では、それは「安全」ではない可能性があります。
読書から DWR サイト それは言う:
HTTP リクエストとレスポンスを読み取り専用として扱うことが重要です。HTTP ヘッダーは正常に通過する可能性がありますが、一部のブラウザーがそれらを無視する可能性は十分にあります。
私はこれを、Cookie やリクエスト属性の設定は禁止であることを意味すると解釈しました。
そうは言っても、リクエスト属性を設定するコード(そのページを読む前に書いたコード)があり、(上記のコメントで述べたCookieの削除を除けば)正常に動作しているようです。
クライアント側で Cookie を操作することは、「ベスト プラクティス」とはむしろ逆です。そしてそれは必要ないはずです。HttpOnly Cookie は何のために導入されたわけではありません。