Pergunta

Eu tenho que implementar a funcionalidade de auto-logout em um dos meus projetos e eu figura simplesmente não consigo descobrir onde começar a procurar ideias, mas SO .

O que eu preciso é que o aplicativo para redirecionar o usuário para a página de login, se a sessão do usuário expirou. Por favor, diga-me quanto ao que deve ser a minha abordagem para lidar com esse requisito.

Problema Declaração: Se as folhas de usuários do sistema por mais de n minutos em qualquer log-in exemplo, o sistema automaticamente deve registrá-los fora.

Foi útil?

Solução 2

Isto foi conseguido através da seguinte maneira:

1) Salve o carimbo de tempo de cada pedido (servidor e ajax excluindo o pedido de sessão verificação ajax) para o servidor em um var sessão.

2) Poll o servidor através de uma função JS usando ajax em intervalos frequentes e verificar se o diff de tempo entre a sessão de time-stamp e o tempo de solicitação ajax é maior que o tempo limite da sessão val, em seguida, log-off do usuário atual ea de regresso um bool para essa solicitação ajax.

3) Redirecionar a página atual para a página de login, se o bool retornado é verdadeiro.

Outras dicas

Indo nos comentários tanto quanto a pergunta, eu não tenho certeza se você está atrás de algo que irá registrar o usuário para fora depois de um certo tempo, independentemente da atividade, ou logo após um período de inatividade.

Se você está feliz em usar o padrão ASP.NET mecanismos , isso pode ser feito para você, sem qualquer grande trabalho:

Configurar seu provedor de associação .

Certifique-se de que o seu autenticação seção define um loginUrl:

<authentication mode="Forms">
  <forms loginUrl="login.aspx" />
</authentication>

Você pode definir um tempo limite diferente do padrão 30 minutos usando o atributo "timeout" na formas elemento :

<authentication mode="Forms">
  <forms loginUrl="login.aspx" timeout="15"/>
</authentication>

Isto irá registrar o usuário para fora após 15 minutos de inatividade em seu site (ou com o navegador aberto sem "batimento cardíaco" javascript ou se gastar 15 minutos em outro site).

Negar acesso a usuários anônimos

<authorization>
  <deny users="?" />
</authorization>

Em seguida, garantir que o seu login, registo e páginas de senha possivelmente esquecidos são acessíveis a todos os usuários que utilizam o local Elemento:

<location path="Logon.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<location path="Register.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<!-- etc -->

Desta forma, quando cookie de autenticação de um usuário expira eles serão redirecionados para o URL especificado no elemento loginUrl da sua página de formulários.


Se você não estiver usando os mecanismos do ASP.NET padrão, então você provavelmente seria melhor implementar uma "página base" modelo tipo.

Crie uma nova classe que herda de System.Web.UI.Page que irá verificar o estado de login do usuário, e se eles não são logged in / cronometrado para fora, em seguida, redirecioná-los para sua página de login.

Em você páginas que estão a ser bloqueado, em vez de herdar a partir System.Web.UI.Page, você herda de sua classe de página base (um exemplo deste tipo de configuração para fazer algo semelhante - configuração de verificação em cada página ) podem ser vistos em minha resposta aqui


A sua página de login provavelmente terá que ter algum quadro rebentando JS nele para pular de volta para fora do iFrame:

if (top!=self.parent){
  top.location=self.parent.location;
}

Ou você está dizendo que a tecla "voltar" eles ainda podem ver suas páginas através do cache navegadores? Caso em que você vai precisar para ser brincar com os cabeçalhos de cache em cada página:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Ok, bem, nesse caso você também precisa de um objeto timer JS para executar uma Location.Replace à sua página de login - tem isso em um controle de usuário em cada página (ou melhor ainda, em sua página mestra) para redirecionar automaticamente o usuário após n minutos:

<script type="text/javascript">
  setTimeout('location.Replace("/login.aspx")', 900000);
</script>

O tempo é em milissegundos, para que isso irá movê-los em em 15 minutos, e não há necessidade de obter todo o framework jQuery no lugar só para isso.

Você também pode querer olhar para a meta tag refresh:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />

Que irá forçar o navegador para atualizar a página de login após 15 minutos (Essa é em segundos).

Uma vez que você não sabe por onde começar, você pode encontrar este artigo 4guys útil: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Editar

Parece que o jQuery temporizador pode ser útil se você quiser redirecionar para uma URL depois um período conhecido de tempo decorrido (ou seja, o período de validade da sessão).

Espero que isso ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top