AJAX応答でCookieを設定できますか?そうでない場合、私の代替ソリューションは何ですか? Javascriptまたは同様のもので設定する必要がありますか?
はい、サーバーは通常のリクエストとサーバーを区別できないため、通常のリクエストと同様に、サーバー側コードのAJAXリクエストにcookieを設定できますAJAXリクエスト。
AJAXリクエストはサーバーへのリクエストの特別な方法であり、サーバーはHTTPリクエストの場合と同様に応答する必要があります。要求の応答で、Cookieを追加できます。
XMLHttpRequestのw3仕様セクション4.6. によると、ユーザーエージェントはSet-Cookieヘッダーを尊重する必要があります。答えはイエスです。できるはずです。
引用:
ユーザーエージェントがHTTP状態管理をサポートしている場合、必要に応じて(Set-Cookie応答ヘッダーで受信され、Cookieヘッダーで送信される)Cookieを保持、破棄、送信する必要があります。
記録については、AJAX呼び出しが同じドメインで行われた場合にのみ、上記のすべてが(まだ)trueであることに注意してください。 AJAXを使用して別のドメインにCookieを設定することを検討している場合、まったく異なる can of worms を開いています。ただし、クロスドメインCookieの読み取りは機能します(または、少なくともサーバーがそれらを提供します。クライアントのUAがコードへのアクセスを許可するかどうかは、別のトピックです。2014年現在)。
また、サーバーがhttp以外のリクエストでセキュアCookieを設定していないことも確認してください。私のajaxリクエストが「安全な」セットでphpセッションを取得していることがわかりました。私はhttpsを使用していなかったため、セッションCookieを送り返さず、各ajaxリクエストでセッションがリセットされていました。