Una risposta AJAX può impostare un cookie? In caso contrario, qual è la mia soluzione alternativa? Devo impostarlo con Javascript o qualcosa di simile?
Una risposta AJAX può impostare un cookie? In caso contrario, qual è la mia soluzione alternativa? Devo impostarlo con Javascript o qualcosa di simile?
Risposte:
sì , puoi impostare i cookie nella richiesta AJAX nel codice lato server proprio come faresti per una richiesta normale poiché il server non è in grado di distinguere tra una richiesta normale o una richiesta AJAX.
Le richieste AJAX sono solo un modo speciale di richiedere al server, il server dovrà rispondere come in qualsiasi richiesta HTTP. Nella risposta alla richiesta è possibile aggiungere 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.
- da w3.org/TR/XMLHttpRequest
In base alla sezione 4.6.3 della specifica w3 per XMLHttpRequest, un agente utente deve rispettare l'intestazione Set-Cookie. Quindi la risposta è sì, dovresti essere in grado di farlo.
Quotazione:
Se l'agente utente supporta la gestione dello stato HTTP, dovrebbe persistere, scartare e inviare i cookie (come ricevuti nell'intestazione della risposta Set-Cookie e inviati nell'intestazione dei Cookie) come applicabile.
Per la cronaca, tieni presente che tutto quanto sopra è (ancora) vero solo se la chiamata AJAX viene effettuata sullo stesso dominio. Se stai cercando di impostare i cookie su un altro dominio utilizzando AJAX, stai aprendo una lattina di worm completamente diversa . La lettura dei cookie tra domini funziona, tuttavia (o almeno il server li serve; se UA del tuo cliente consente al tuo codice di accedervi è, ancora una volta, un argomento diverso; dal 2014 lo fanno).
withCredentials=true
l' xhr
oggetto (2) Impostare Access-Control-Allow-Credentials
sia nella richiesta di preflight OPTIONS che la richiesta effettiva (3) Impostare il cookie secondo necessità
Controlla anche che il tuo server non stia impostando cookie sicuri su una richiesta non http. Ho appena scoperto che la mia richiesta Ajax stava ottenendo una sessione PHP con set "sicuro". Poiché non ero su HTTPS, non stava inviando nuovamente il cookie di sessione e la mia sessione veniva reimpostata su ogni richiesta Ajax.