Pergunta

Tenho um requisito para um botão de logout explícito para os usuários em um aplicativo Web ASP.NET. Estou usando o IIS6 com autenticação básica (SSL). Posso redirecionar para outra página da web, mas o navegador mantém a sessão viva. Pesquisei no Google e encontrei uma maneira de fazê -lo, permitindo que um controle X ativo se comunique com o IIS e matasse a sessão. Estou em um ambiente restrito que não permite a autenticação de formulários e os controles X ativos também não são proibidos. Alguém mais tinha esse requisito e como você lidou com isso?

Ok, é disso que eu tinha medo. Eu vi respostas semelhantes na rede e esperava que alguém tivesse uma maneira de fazê -lo. Obrigado pelo seu tempo. Acho que posso usar o JavaScript para evitar o botão traseiro como o histórico.back ()

Foi útil?

Solução

Eu estava lutando com isso por alguns dias.

Usando o IE específico 'document.execCommand('ClearAuthenticationCache');'Não é para todos uma boa opção: 1) libera todas as credenciais, o que significa que o usuário, por exemplo, também será registrado em seu gmail ou em qualquer outro site em que ele esteja atualmente autenticado 2) é apenas o IE;)

Tentei usar session.abandon () e depois redirecionando para o meu padrão.aspx. Isso por si só não é suficiente. Você precisa dizer explicitamente ao navegador que a solicitação que foi feita não está autorizada. Você pode fazer isso usando algo como:

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

Isso resultará no seguinte: o usuário clica no botão de logout ==> Ele receberá a janela de login básica. No entanto: se ele pressionar Escape (a caixa de diálogo de login desaparece) e atinge a atualização, o navegador envia automaticamente as credenciais novamente, fazendo com que o usuário se acumule, embora possa pensar que ele está registrado.

O truque para resolver isso é sempre cuspir um 'reino' único. Em seguida, o navegador não reenvie as credenciais no caso descrito acima. Eu escolhi cuspir a data e a hora atuais.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

Outra coisa que você precisa fazer é dizer ao navegador para não armazenar em cache a página:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

Com todas essas coisas em vigor, funciona (para mim) no IE, mas até agora eu ainda não era capaz de impedir que o Firefox faça login no usuário quando o usuário pressiona pela primeira vez escape (esconde a caixa de diálogo Basic Login) e depois atualize (F5 ) ou o botão de volta dos navegadores.

Outras dicas

o Session.Abandon O método destrói todos os objetos armazenados em um objeto de sessão e libera seus recursos. Se você não chamar o método de abandono explicitamente, o servidor destrói esses objetos quando a sessão se destaca.

Você já tentou ligar session.abandon em resposta ao botão Clique?

Editar:

Parece que esse é um problema clássico do botão traseiro.

Há muito pouco que você pode fazer sobre o botão traseiro. Imagine que o usuário acabou de abrir a página atual em uma nova janela e depois clicou no botão Logout, essa página parece fazer logot, mas não afetará imediatamente o conteúdo da outra janela.

Somente quando eles tentam navegar em algum lugar da janela, ficará aparente que a sessão deles se foi.

Muitos navegadores implementam o botão de volta de uma maneira semelhante (embora não idêntica). Voltar à página anterior não é necessariamente uma navegação para um ponto de vista HTML/HTTP.

Esta é uma solução para esse problema que funciona no IE6 e superior.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

Encontrou isso dehttp://msdn.microsoft.com/en-us/library/bb250510%28vs.85%29.aspx

Equipe da web, em suma, suas credenciais, por favor

P: Jerry B. escreve: "Depois que o usuário validou e processou seu pedido, agora quero invalidar -o. Supondo Tempo que um usuário acessa um módulo específico na web. "

R: Este é um recurso frequentemente solicitado da equipe do Internet Explorer e as pessoas boas lá nos deram uma maneira de fazê -lo no Internet Explorer 6.0 SP1. Tudo o que você precisa fazer é chamar o método EXecCommand no documento, passando em clearauthenticationcache como parâmetro de comando, como este:

document.execCommand("ClearAuthenticationCache");

Esse comando libera todas as credenciais no cache, de modo que, se o usuário solicitar um recurso que precise de autenticação, o prompt de autenticação ocorrer novamente.

Coloquei isso no meu botão de link de logout e funciona no IE6 SP1 e superior:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top