web-dev-qa-db-fra.com

Une réponse AJAX peut-elle définir un cookie?

Une réponse AJAX peut-elle définir un cookie? Si non, quelle est ma solution alternative? Dois-je le configurer avec Javascript ou quelque chose de similaire?

252
Billworth Vandory

Oui, vous pouvez définir un cookie dans la demande AJAX dans le code côté serveur, comme vous le feriez pour une demande normale, car le serveur ne peut pas différencier une demande normale ou une demande normale. AJAX demande.

Les requêtes AJAX sont juste un moyen spécial de demander au serveur, le serveur devra répondre comme dans toute requête HTTP. Dans la réponse à la demande, vous pouvez ajouter des cookies.

235

Conformément à section de la spécification w3 4.6.3 pour XMLHttpRequest , un agent d'utilisateur doit respecter l'en-tête Set-Cookie. Donc, la réponse est oui, vous devriez pouvoir le faire.

Citation:

Si l'agent utilisateur prend en charge la gestion d'état HTTP, il doit persister, supprimer et envoyer des cookies (tels que reçus dans l'en-tête de réponse Set-Cookie et envoyés dans l'en-tête Cookie), selon le cas.

286
Strelok

Pour mémoire, sachez que tout ce qui précède est (toujours) vrai que si l'appel AJAX est effectué sur le même domaine. Si vous envisagez de définir des cookies sur un autre domaine à l'aide d'AJAX, vous ouvrez un programme totalement différent boîte de Pandore . Cependant, la lecture de cookies interdomaines fonctionne (ou du moins le serveur les sert; que l’agent utilisateur de votre client autorise votre code à y accéder est à nouveau un sujet différent; à partir de 2014, ils le feront).

84
Bogdan Stăncescu

Vérifiez également que votre serveur ne configure pas de cookies sécurisés sur une requête non http. Je viens de découvrir que ma demande ajax recevait une session php avec le jeu "sécurisé". Parce que je n'étais pas sur https, cela ne renvoyait pas le cookie de session et ma session était réinitialisée à chaque demande ajax.

6
Phil