• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

maiden

Logout - Não permitir que utilizador retroceda

4 mensagens neste tópico

Boas,

Tenho uma página onde o utilizador efectua o seu login e é redireccionado para outra página que necessita de autenticação, em que é verificada a existência  de uma variável de sessão caso o utilizador se encontre autenticado.

Nessa página que  necessita de autenticação tenho um botão de logout, com o seguinte código associado ao evento click

Protected Sub btnLogOut_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLogOut.Click

    'Eliminar o cookie caso exista
    If Not Request.Cookies("cookie") Is Nothing Then
        Response.Cookies("cookie").Expires = DateTime.Now.AddDays(-1)
    End If
    Session.Abandon()
    Response.Redirect("index.aspx")

End Sub

Se o utilizador efectuar logout é redireccionado para a página principal, onde se encontra o formulário de login, e se escrever na barra de endereço o endereço da página que necessita de autenticação, este dá erro, pois verifica que não existe a variável de sessão criada no processo de login. Porém, se utilizar o botão retroceder do browser, este volta para a página que necessita de autenticação, mostrando o seu conteúdo. Pensei que terminando a sessão ou eliminando as variáveis através do comando Session.RemoveAll() conseguisse resolver, mas sem sucesso. Alguém já teve este problema?

Obrigado desde já.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que adicionar um header para não fazer cache da página. Assim quando retrocedes, ele vai fazer load da página e então já aparece a página protegida, ou lá como estás a fazer.

Agora não tenho aqui o código, mas procura no google, que encontras várias coisas a tratar disso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim podes usar um header para não fazer cache as paginas. Mas tinhas que colocar em todas as paginas.

<%
Response.Expires = 60;
Response.AddHeader("pragma", "no-store");
Response.AddHeader("cache-control", "private");
Response.CacheControl = "no-cache";
%>

Mas porque não mudar o metodo de autenticação no web.config

    <authentication mode="Forms">
	<forms loginUrl="Login\Login.aspx" protection="All" timeout="60" />
    </authentication>

Assim ninguem consegue fazer navegar no site sem ser autenticado mesmo colcoando o URLs manualmente.

Na pagina de logout no Page_load basta colocares


private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
AppTrace.WriteLineInfo("Ending Session " + Session.SessionID.ToString());
Session.Clear();
Session.Abandon();
FormsAuthentication.SignOut();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelas dicas.

Tentei utilizando o segundo método descrito pelo skm mas não me safei, fiquei-me mesmo pelo tal header em todas as páginas. Por agora está a funcionar, mas essa ideia de alterar o tipo de autenticação é algo a explorar (com mais calma).

Obrigado.

Cumps,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora