Como eu iria usar AJAX para determinar se a sessão do usuário expirou e, em seguida, devolvê-los para a página de login?

StackOverflow https://stackoverflow.com/questions/1638171

Pergunta

No seguinte scenaio, como eu poderia fazer uso de AJAX para verificar se a sessão, se ainda está ativa e, em seguida, retornar o usuário para a página de login?

  1. O usuário se conecta e começa a trabalhar
  2. O usuário desaparece por 10 minutos e a sessão expira
  3. O usuário retorna ao seu computador e ainda está na tela eram em 10 minutos atrás
  4. O usuário envia seu trabalho, buts se voltou para a tela de login (por meu cheque estado de sessão existente) e as alterações não são persistentes

O ideal é que eu estou atrás é alguma maneira de verificar o estado da sessão a cada 1 minuto para ver se o usuário estiver ocioso. Se eles estão ociosos ea sessão está prestes a expirar, eu salvar as suas alterações temporariamente e, em seguida, em seguida, quando a sessão expira, eu mudaria automaticamente a página para a tela de login antes de o usuário retorna de ficar ocioso.

É também possível fazer isso sem usar setTimeout ()?

Foi útil?

Solução

A maioria, se isso pode ser tratado do lado do servidor.

Sempre que houver usuário do lado do servidor atividade - de carregamento da página, chamada ajax, qualquer que seja, definir uma variável de sessão

Session["last_activty"]=DateTime.Now;

Em suas chamadas Ajax e carregamento da página (poderia fazer isso em uma página mestra página master / nested para páginas que exigem autenticação), cheque (pseudocódigo)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;

Se o carregamento da página ou webmethod / webservice método de determinar com base no acima exposto que o usuário expirou, seja

a) redirecionamento para (lado do servidor da página de login), ou

b) retornar um código de status com o seu interlocutor ajax que fará com que um redirecionamento ou exibição de uma janela de autenticação.

NOTA : cuidado com o uso de variáveis ??de sessão real como eles não tendem a trabalhar bem / em tudo em ambientes de servidores em cluster. Um lugar melhor para este tipo de coisa está em seu banco de dados.

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top