Une réponse AJAX peut-elle créer un cookie? Sinon, quelle est ma solution alternative? Dois-je le définir avec Javascript ou quelque chose de similaire?
Une réponse AJAX peut-elle créer un cookie? Sinon, quelle est ma solution alternative? Dois-je le définir avec Javascript ou quelque chose de similaire?
Réponses:
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 faire la différence entre une demande normale ou une demande AJAX.
Les demandes AJAX ne sont qu'un moyen spécial de demander au serveur, le serveur devra répondre comme dans toute demande HTTP. En réponse à la demande, vous pouvez ajouter des cookies.
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.
- de w3.org/TR/XMLHttpRequest
Selon la section 4.6.3 de la spécification w3 pour XMLHttpRequest, un agent utilisateur doit respecter l'en-tête Set-Cookie. La réponse est donc oui, vous devriez pouvoir.
Devis:
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), le cas échéant.
Pour mémoire, sachez que tout ce qui précède n'est (encore) vrai que si l'appel AJAX est effectué sur le même domaine. Si vous cherchez à configurer des cookies sur un autre domaine à l'aide d'AJAX, vous ouvrez une boîte de vers totalement différente . La lecture des cookies interdomaines fonctionne cependant (ou du moins le serveur les sert; si l'AU de votre client autorise votre code à y accéder est, encore une fois, un sujet différent; depuis 2014, ils le font).
withCredentials=true
pour l' xhr
objet (2) Définir à la Access-Control-Allow-Credentials
fois dans la demande de contrôle en amont OPTIONS ainsi que dans la demande réelle (3) Définir le cookie selon les besoins
Vérifiez également que votre serveur ne définit pas de cookies sécurisés sur une demande non http. Je viens de découvrir que ma demande ajax recevait une session php avec un ensemble "sécurisé". Parce que je n'étais pas sur https, il ne renvoyait pas le cookie de session et ma session était réinitialisée à chaque demande ajax.