Uma resposta AJAX pode definir um cookie? Caso contrário, qual é a minha solução alternativa? Devo defini-lo com Javascript ou algo semelhante?
Uma resposta AJAX pode definir um cookie? Caso contrário, qual é a minha solução alternativa? Devo defini-lo com Javascript ou algo semelhante?
Respostas:
Sim , você pode definir um cookie na solicitação AJAX no código do servidor, assim como faria com uma solicitação normal, pois o servidor não pode diferenciar entre uma solicitação normal ou uma solicitação AJAX.
As solicitações AJAX são apenas uma maneira especial de solicitar ao servidor, o servidor precisará responder novamente como em qualquer solicitação HTTP. Na resposta da solicitação, você pode adicionar 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
De acordo com a seção 4.6.3 da especificação w3, para XMLHttpRequest, um agente do usuário deve respeitar o cabeçalho Set-Cookie. Portanto, a resposta é sim, você deve ser capaz.
Cotação:
Se o agente do usuário suportar o Gerenciamento de Estado HTTP, ele deverá persistir, descartar e enviar cookies (conforme recebido no cabeçalho de resposta Set-Cookie e enviado no cabeçalho de Cookie) conforme aplicável.
Para o registro, lembre-se de que todas as opções acima são verdadeiras (ainda) somente se a chamada AJAX for feita no mesmo domínio. Se você deseja definir cookies em outro domínio usando o AJAX, está abrindo uma lata de worms totalmente diferente . A leitura de cookies entre domínios funciona, no entanto (ou pelo menos o servidor os serve; se o UA do seu cliente permite que seu código os acesse é, novamente, um tópico diferente; a partir de 2014).
withCredentials=true
o xhr
objeto (2) Defina Access-Control-Allow-Credentials
tanto na solicitação de comprovação de OPÇÕES quanto na solicitação real (3) Defina o cookie conforme necessário
Verifique também se o servidor não está configurando cookies seguros em uma solicitação não http. Acabei de descobrir que minha solicitação ajax estava recebendo uma sessão php com o conjunto "seguro". Como eu não estava no https, não estava enviando de volta o cookie da sessão e minha sessão estava sendo redefinida em cada solicitação de ajax.