Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
613
Assunto : ASP.NET
Titulo: Desviando para o login ao término da sessão

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Antigamente, no ASP 3, o login do usuário era controlado por variáveis de sessão. Assim sendo, quando a sessão encerra-se o usuário é naturalmente desviado para a tela de login pelo código que inserimos para testar se ele encontra-se logado.

No ASP.NET, porém, o processo de controle de login é bem diferente. A Forms Authentication não usa a sessão e sim um cookie temporário no lado client para autenticar o usuário (cookie muito bem criptografado).

É muito comum, porém, ainda mantermos informações do usuário no ambiente de sessão do servidor. Mas o que ocorre é que a sessão do usuário pode ser encerrada (timeout), seus dados perdidos, mas o login do usuário ainda se manter, pois ele é controlado por cookie e não pela sessão.

Com isso é muito frequente surgir a dúvida : Como redirecionar o usuário para a página de login quando a sessão dele for encerrada ?

Bem, vamos ver como resolver isso. É interessante observar que não iremos redirecionar o usuário para a página de login quando a sessão for encerrada, mas sim quando ela se iniciar. A sessão é encerrada por timeout, nesse momento nem sabemos se o usuário irá mesmo voltar ou não. A questão é quando ele volta, a sessão é reiniciada porém ele já tem o cookie de autenticação.

Então vamos precisar destruir o cookie de autenticação do usuário. Basicamente, um logoff, que por estranho que pareça, faremos no evento session_onstart, dentro do global.asax . Precisaremos aicionar um imports para system.web.security para em seguida fazer o logoff :

formsauthentication.signout()

Porém ainda temos problemas. O evento session_onstart acontece depois do evento application_authenticaterequest, ou seja, depois que o usuário já foi identificado pelo servidor. Isso faz com que o redirecionamento para a tela de login não aconteça.

É claro que poderíamos forçar um redirect direto para a tela de login, mas quanto mais deixarmos essa tarefa por conta do ASP.NET, melhor. Então o que podemos fazer é forçar a que a sequencia de eventos seja executada novamente, fazendo um redirect para a própria página. Veja como fica :

formsauthentication.signout()
response.redirect(request.servervariables("script_name"))

O que vai acontecer é que o redirect irá provocar a re-execução dos eventos e no evento application_authenticaterequest, ao ser identificado que o usuário não possui mais o cookie de autenticação, ele será automaticamente desviado para a tela de login, sem a necessidade de código algum neste evento.

Mas existe um problema. Isso também acontecerá na inicialização normal do site. O desvio para a tela de login transmite um parâmetro via GET, returnUrl . Com esse redirect rodando na inicialização da sessão o parâmetro se perde, então precisamos fazer um IF a mais :

if instr(ucase(request.servervariables("script_name")),"LOGIN.ASPX")=0 then
formsauthentication.signout()
response.redirect(request.servervariables("script_name"))
end if

Na inicialização da aplicação a página que estará sendo chamada é a login.aspx, e o redirect será evitado. Quando o usuário perder a sessão, porém, perderá também o login e voltará para a tela de autenticação


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 1/31/2017 12:12:00 PM
nome: qzlvnnVkSu
email: derby451@hotmail.com
comentário:
zkMXCN http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 9:48:00 AM
nome: GgstMLfXvW
email: derby451@hotmail.com
comentário:
Fdg0jX http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 9:47:00 AM
nome: GrmCftskRux
email: jogcbfn@hotmail.com
comentário:
2uRjqS http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/4/2017 7:11:00 PM
nome: AQiyXNDayO
email: jfvynms4281rt@hotmail.com
comentário:
S8ndbZ http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com

data: 7/3/2012 10:53:00 AM
nome: Gilberto
email: gilberto.ribeiro@hotmail.com.br
comentário:
Senhores, muito obrigado!

Várias vezes que precisei de algum auxílio, foi neste site que consegui.

A equipe está de parabéns!


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br