Iframe keep-alive função - o que é necessário para repor o tempo limite da sessão?
-
13-09-2019 - |
Pergunta
Eu tenho um iframe oculto que é atualizado a cada vez em quando, a fim de manter a sessão ASP.NET instalado e funcionando, durante o tempo que o usuário está online.
No entanto, eu fui ficando relatos de usuários que experimentam tempo limite de sessão, então agora eu estou em dúvida sobre o que é necessário para repor o temporizador da sessão.
página de conteúdo do iframe oculto (página HTML simples) refresca-se em um determinado intervalo de tempo, o que é significativamente menor do que o tempo limite da sessão.
A minha pergunta é: É o suficiente (para o temporizador sessão para reiniciar) para deixar a página de refrescar-se, mesmo quando as responde servidor com um HTTP / 1.x 304 não modificado?
É simplesmente o pedido GET-se que informa o servidor para repor o temporizador da sessão?
Ou eu preciso ter certeza de que realmente buscar a página e receber uma resposta HTTP / 1.x 200 OK?
Solução
Tudo que você tem que fazer para manter a sessão viva é enviar um pedido para uma página da sessão atual. Você pode fazer isso via iframe, ou via ajax.
Se você simplesmente atualizar a página no iframe, a resposta pode ser um cache um - assim a 304. Você tem que enviar um novo pedido de cada vez -
var url = "http://domain.com/defibrillator.aspx?" + (new Date()).getTime();
por exemplo.
http://domain.com/defibrillator.aspx?1556467987987
http://domain.com/defibrillator.aspx?5448796497878
http://domain.com/defibrillator.aspx?4123165487987
....
EDIT 1
Ou você pode usar o atributo Atualizar cabeçalho HTTP .
EDIT 1.1
Se você estiver usando o codeproject artigo mencionado acima, em seguida, tentar modelá-lo usando AJAX em vez de iframe -. Que iria poupar alguns bytes de marcação iframe adicional
EDIT 2 - Sobre HTTP 304 Not Modified
a Se o cliente tiver realizado pedido GET condicional eo acesso é permitido, mas o documento não foi modificado, o servidor deverá responder com este código de status. a 304 resposta não deve conter um mensagem-corpo, e, portanto, é sempre terminada pela primeira linha vazia após os campos de cabeçalho.
Isto significa que o pedido não atingiu o gasoduto ASP.NET, e directamente foi servido por si só IIS. ambiente ASP.NET não sabe que a solicitação foi feita. Assim, não irá realizar a renovação sessão.