php - dentro - what is ajax




As solicitações do AJAX retêm informações da sessão do PHP? (6)

Se eu tivesse um usuário logado no meu site, tendo seu ID armazenado em $_SESSION , e do seu navegador ele clicou em um botão 'Salvar' que faria uma requisição AJAX para o servidor. Seus $_SESSION e cookies serão retidos nesta solicitação, e posso confiar com segurança em que o id esteja presente no $_SESSION ?


É muito importante que as solicitações do AJAX retenham a sessão. O exemplo mais fácil é quando você tenta fazer uma solicitação AJAX para o painel de administração, digamos. É claro que você protegerá a página para a qual você fez a solicitação, não para ser acessada por outras pessoas que não tenham a sessão obtida após o login do administrador. Faz sentido?


A resposta é sim:

As sessões são mantidas no lado do servidor. No que diz respeito ao servidor, não há diferença entre uma solicitação AJAX e uma solicitação de página regular. Ambos são pedidos HTTP, e ambos contêm informações de cookie no cabeçalho da mesma maneira.

Do lado do cliente, os mesmos cookies sempre serão enviados para o servidor, seja um pedido regular ou um pedido AJAX. O código Javascript não precisa fazer nada especial ou mesmo para estar ciente disso, ele funciona da mesma forma que acontece com solicitações regulares.


Isso é o que os frameworks fazem, por exemplo, se você inicializar a sessão no Front Controller ou no script boostrap, você não precisará se preocupar com a sua inicialização para controladores de página ou ajax. Estruturas PHP não são uma panaceia, mas fazem tantas coisas úteis como esta!


No entanto, uma coisa a observar, particularmente se você estiver usando uma estrutura, é verificar se o aplicativo está regenerando ids de sessão entre as solicitações - qualquer coisa que dependa explicitamente da id da sessão terá problemas, embora obviamente o restante dos dados a sessão não será afetada.

Se o aplicativo estiver gerando novamente ids de sessão como este, você poderá acabar com uma situação em que uma solicitação ajax de fato invalida / substitua o id da sessão na página solicitante.


Se o arquivo PHP das solicitações AJAX tiver uma session_start() as informações da sessão serão mantidas. (descobrindo que as solicitações estão dentro do mesmo domínio)


Bem, nem sempre. Usando cookies, você é bom. Mas o "posso confiar com segurança no id estar presente" me instigou a estender a discussão com um ponto importante (principalmente para referência, já que a contagem de visitantes desta página parece bastante alta).

O PHP pode ser configurado para manter sessões por regravação de URL, em vez de cookies. ( Como é bom ou ruim (<- veja, por exemplo, o comentário mais importante lá) é uma questão separada , vamos nos ater ao atual, com apenas uma nota: o problema mais proeminente com sessões baseadas em URL - o flagrante visibilidade do ID da sessão nua - não é um problema com as chamadas internas do Ajax; mas, se ele estiver ativado para o Ajax, ele também será ativado para o resto do site, por isso ...)

No caso de sessões de reescrita de URL (sem cookies), as chamadas do Ajax devem cuidar delas por si mesmas de que seus URLs de solicitação estão corretamente criados. (Ou você pode criar sua própria solução personalizada. Você pode até mesmo recorrer à manutenção de sessões no lado do cliente , em casos menos exigentes.) O ponto é o cuidado explícito necessário para a continuidade da sessão, se não estiver usando cookies:

  1. Se o Ajax chamar apenas extrair URLs textualmente do HTML (como recebido do PHP), isso deve ser OK, já que eles já estão prontos (umm, cookified).

  2. Se eles precisarem montar URIs de solicitação, o ID da sessão precisará ser adicionado à URL manualmente. (Confira here , ou as fontes de página geradas pelo PHP ( com a reescrita do URL ativada ) para ver como fazer isso.)

De OWASP.org :

Efetivamente, o aplicativo da Web pode usar mecanismos, cookies ou parâmetros de URL ou até mesmo alternar de um para outro (reconfiguração automática de URL) se determinadas condições forem atendidas (por exemplo, a existência de clientes da web sem suporte a cookies ou quando não houver cookies). aceita devido a preocupações de privacidade do usuário).

De uma postagem no Ruby-forum :

Ao usar o php com cookies, o ID da sessão será enviado automaticamente nos cabeçalhos da solicitação, mesmo para o Ajax XMLHttpRequests. Se você usar ou permitir sessões php baseadas em URL, você terá que adicionar o ID da sessão a cada URL de solicitação do Ajax.





session