Estou usando o node.js Express. Notei que, se você fizer isso, precisará definir o campo httpOnly como false no lado do servidor, aparentemente.
Chong Lip Phang
Respostas:
247
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.
Lembre-se de que se o cookie será respeitado pelo agente HTTP é outra história.
Franci Penov
6
@Franci: concordou. Mas acho que a pergunta só faz sentido para clientes http que suportam cookies. Portanto, todo solicitante de pergunta deseja saber apenas se os cookies podem ser escritos na solicitação AJAX, o que significa que seu UA suporta cookies :)
isso. __curious_geek
10
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
smwikipedia
12
Isso responde se o servidor puder responder a uma solicitação ajax com um cabeçalho Set-Cookie. E é claro que pode, mas a questão é se essa resposta realmente resultará no fato de o cliente ler e definir o cookie recebido na resposta ajax ou se deve ser feito manualmente. Esta não é uma resposta para isso.
21416 Alex
2
As solicitações do @Legends Ajax geralmente têm o cabeçalho X-Requested-With definido como XMLHttpRequest, é assim que elas podem ser identificadas, mas uma solicitação pode ser feita sem esse cabeçalho; se isso acontecer, não poderá ser distinguido do carregamento normal da página
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.
O IE suporta o cabeçalho Set-Cookie nas respostas, no caso de respostas XHR?
detj 10/10/12
Como deveria em um redirecionamento, e não é respeitado em alguns navegadores.
Walter Macambira
1
Para mim, usando o Chrome, os cabeçalhos recebidos em solicitações de ajax serão aplicados automaticamente ao cliente.
21416 Alex
Descobri que, se o lado do servidor estiver atrasando a resposta como gzip, o cookie não será definido. Isso deveria fazer parte da especificação ou é apenas um problema de implementação?
Juminoz
89
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).
Para enviar cookies entre domínios, você precisa definir o withCredentials flag
aeosynth
5
Para o cenário entre domínios, três coisas precisam acontecer: - (1) O cliente precisa definir withCredentials=trueo xhrobjeto (2) Defina Access-Control-Allow-Credentialstanto na solicitação de comprovação de OPÇÕES quanto na solicitação real (3) Defina o cookie conforme necessário
Kunal
6
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.
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.
fonte
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/XMLHttpRequestDe 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:
fonte
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).
fonte
withCredentials=true
oxhr
objeto (2) DefinaAccess-Control-Allow-Credentials
tanto na solicitação de comprovação de OPÇÕES quanto na solicitação real (3) Defina o cookie conforme necessárioVerifique 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.
fonte