Cache em AJAX

Após o desenvolvimento de um controlo de autenticação todo boneco, com as necessárias preocupações em termos de segurança, usando uma estratégia de desafio-resposta deparei-me com um problema. Um utilizador depois de fazer login e logout já não conseguia fazer login novamente! wow, o que é que se passa...

Como desconfiei logo do que se passava encontrar a solução foi rápido. Mas voltando ao problema, o segundo pedido do desafio era realizado para o mesmo URL que o primeiro, logo, como o browser tinha a resposta a esse pedido em cache nem fazia o pedido ao servidor... conclusão, retornava o mesmo desafio que, naturalmente, já não era válido do ponto de vista do servidor e o processo de login falhava mais à frente.

Solução: meti um parâmetro adicional na queryString só para o pedido ser "diferente" (usei a data actual do sistema do cliente)

3 comentários:

Anónimo disse...

E porquê não desconfiaste disso logo no semestre passado? ah? Foi só para me deixares a olhar com cara de burro para o Eng. só pode! :)

vITOR disse...

A cultura desta vez já era outra :)

Anónimo disse...

Outra solução:
xhr.setRequestHeader('If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 GMT');
xhr.setRequestHeader('Cache-Control', 'no-cache');

Antes do send ;)

http://ajaxian.com/archives/ajax-ie-caching-issue