Pergunta

Eu estou usando cookies baseados em sessão com o meu site. Para minha completa surpresa, notei que se eu definir um cookie de sessão (não um cookie persistente), perto de um guia, e volte a ligar para o site, os cookies de sessão ainda estão lá. Isso não é o que eu teria esperado, na verdade. Eu teria esperado que os cookies de sessão para ser excluído.

Se você fechar o navegador, um cookie de sessão é excluído, então por que não fechar uma aba para ter o mesmo resultado?

Por isso, estou usando PHP5 e jQuery. Existe alguma coisa que eu possa fazer de tal forma que quando uma guia é fechado posso corrigir esse problema sessão? Infelizmente o evento onbeforeunload na etiqueta corpo não é útil aqui porque quando você clique de distância de uma página que dispara esse evento, não apenas fechar uma aba.

Foi útil?

Solução

O cookie de sessão é por processo não por janela. Assim, mesmo se você tiver selecionado uma nova janela você ainda obter o mesmo ID de sessão. Este comportamento faz sentido. Você não gostaria que um usuário para re-sinal em cada tempo eles abriram uma nova janela enquanto navega em seu site.

Eu não estou ciente off mão de qualquer maneira real de contornar isso.

Outras dicas

Isso ocorre por design e tentar mudá-lo é uma idéia muito ruim. O que se um usuário abrir um link em uma nova aba e fecha isso? Caso a sessão na guia original seja destruída? Claro que não! Isso demonstra que você não deve sequer pensar sobre isso.

sessão termina a Quando o fecha a janela última navegador. Se você quiser algo mais, você:

  1. Não quero sessões;
  2. necessidade de fazer o seu próprio "mini-sessão de" infra-estrutura;
  3. são, provavelmente, para um mundo de dor e bugs.

Você também pode escrever um JavaScript que detecta quando uma aba é fechada e excluir o cookie no javascript

armazenamento web Session pode ser usado em vez de cookies, se você precisa depender de encerramento de guia.

Eu encontrei um trabalho em torno.

Eu estou trabalhando em ASP.NET C#. Eu tenho um Master Page para todas as páginas do site, exceto para a página Login. No Master Page Sever Page Load event recebo a Url da página de referência e verificar se ele contém a raiz do site, se não eu redirecionar para a página Login e uma vez que não tem que Master Page que ele exibe.

Isso funciona se eu tentar chegar a uma página de outro site ou se eu entrar no Url para a caixa de endereço do browser. Então, se você fechar a guia e você tenta reentrar de outra aba ou reabrir o guia, mesmo tho o cookie não foi morto não entrada pode ser feita no local sem through indo Login. também Isso funciona mesmo se você não tiver fechado a guia e sua navegação entre locais diferentes na mesma guia.

Este é o código

   if (Request.UrlReferrer == null || !Request.UrlReferrer.AbsoluteUri.ToString().Contains("root"))
        {
            Response.Redirect("~/Account/Login.aspx");
        }

Ao navegar a partir de dentro do local não há nenhum problema, mesmo se você abrir um link para outra página no site para outro guia se abre.

Se você quer ser, adicionalmente, se você pode matar a sessão e cookie de autenticação em que cláusula if antes redircting à página Login.

Este não irá funcionar quando um usuário navegar para outro local na mesma guia e pressiona o botão navegadores back to porque que funciona em esconderijo e não envia automaticamente um pedido para o servidor.

Então, isso não matar o cookie de sessão ou autenticação em fechar a guia, mas pode ajudar a evitar entrar novamente no site, sem o registo depois de fechar a guia.

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