web-dev-qa-db-ja.com

AJAX応答でCookieを設定できますか?

AJAX応答でCookieを設定できますか?そうでない場合、私の代替ソリューションは何ですか? Javascriptまたは同様のもので設定する必要がありますか?

248

はい、サーバーは通常のリクエストとサーバーを区別できないため、通常のリクエストと同様に、サーバー側コードのAJAXリクエストにcookieを設定できますAJAXリクエスト。

AJAXリクエストはサーバーへのリクエストの特別な方法であり、サーバーはHTTPリクエストの場合と同様に応答する必要があります。要求の応答で、Cookieを追加できます。

229

XMLHttpRequestのw3仕様セクション4.6. によると、ユーザーエージェントはSet-Cookieヘッダーを尊重する必要があります。答えはイエスです。できるはずです。

引用:

ユーザーエージェントがHTTP状態管理をサポートしている場合、必要に応じて(Set-Cookie応答ヘッダーで受信され、Cookieヘッダーで送信される)Cookieを保持、破棄、送信する必要があります。

286
Strelok

記録については、AJAX呼び出しが同じドメインで行われた場合にのみ、上記のすべてが(まだ)trueであることに注意してください。 AJAXを使用して別のドメインにCookieを設定することを検討している場合、まったく異なる can of worms を開いています。ただし、クロスドメインCookieの読み取りは機能します(または、少なくともサーバーがそれらを提供します。クライアントのUAがコードへのアクセスを許可するかどうかは、別のトピックです。2014年現在)。

83

また、サーバーがhttp以外のリクエストでセキュアCookieを設定していないことも確認してください。私のajaxリクエストが「安全な」セットでphpセッションを取得していることがわかりました。私はhttpsを使用していなかったため、セッションCookieを送り返さず、各ajaxリクエストでセッションがリセットされていました。

6
Phil