AJAX応答でCookieを設定できますか?そうでない場合、私の代替ソリューションは何ですか?Javascriptなどで設定する必要がありますか?
AJAX応答でCookieを設定できますか?そうでない場合、私の代替ソリューションは何ですか?Javascriptなどで設定する必要がありますか?
回答:
はい、サーバーは通常のリクエストとAJAXリクエストを区別できないため、通常のリクエストと同じように、サーバー側コードのAJAXリクエストにCookieを設定できます。
AJAXリクエストはサーバーへのリクエストの特別な方法に過ぎず、サーバーは他のHTTPリクエストと同様に応答する必要があります。リクエストの応答では、Cookieを追加できます。
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
-w3.org/TR/XMLHttpRequest
XMLHttpRequestのw3仕様セクション4.6.3によると、ユーザーエージェントはSet-Cookieヘッダーを尊重する必要があります。したがって、答えは「はい」です。
引用:
ユーザーエージェントがHTTP状態管理をサポートしている場合は、必要に応じて、Cookieを永続化、破棄、および送信します(Set-Cookie応答ヘッダーで受信され、Cookieヘッダーで送信されます)。
参考までに、AJAX呼び出しが同じドメインで行われた場合にのみ、上記のすべてが(まだ)当てはまることに注意してください。AJAXを使用して別のドメインにCookieを設定することを検討している場合は、まったく異なるワームの缶を開いていることになります。ただし、クロスドメインCookieの読み取りは機能します(または、少なくともサーバーがそれらにサービスを提供します。クライアントのUAがコードにアクセスを許可するかどうかは、ここでも別のトピックです。2014年の時点では機能しています)。
withCredentials=true
はxhr
オブジェクトを設定する必要があります(2)Access-Control-Allow-Credentials
OPTIONSプリフライトリクエストと実際のリクエストの両方に設定する(3)必要に応じてCookieを設定する