Pergunta

Eu estou querendo saber se eu posso lidar com um evento de tempo limite da sessão. Eu preciso fazer uma chamada de função para a minha função logo antes de tempo limite de sessão ou usuário deixou minha página, ou janela do navegador fechado. A parte mais importante aqui é ter acesso a tudo armazenado durante a sessão, variáveis ??de sessão.

Foi útil?

Solução

Dê uma olhada no método Session_End () em global.asax. O arquivo global já deve estar ligado a chamar esse método quando a sessão termina. Você pode apenas colocar o seu código lá no entanto você gostaria.

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Fires when the session ends
    End Sub

Claro, você deve observar que a sessão é inteiramente uma coisa do lado do servidor. Ele só vai acabar após X minutos de inatividade (20 minutos é o padrão). Não vai acabar no instante em que o usuário fecha a janela. ASP.NET não tem conhecimento de um usuário fechar uma janela ou sair da página.

E, de fato, é complicado para tentar executar qualquer ação imediata no lado do servidor quando isso acontece. Quero dizer, é fácil window.onbeforeunload chamada em Javascript e abrir uma caixa de confirmação antes que o usuário fecha a janela. Mas quando você tenta enviar um pacote para o servidor imediatamente antes da janela, na verdade, fecha, eu acho que você vai achar que ela se torna uma tarefa difícil de fazer isso tudo user-friendly. Você poderia escrever algum Javascript que envia uma mensagem para o servidor usando AJAX que notifica o servidor que o usuário está fechando o seu browser e, em seguida, usar mais o Javascript para fechar o navegador depois que a mensagem foi enviada. Mas, então, o usuário receberá a mensagem irritante (na maioria dos navegadores) afirmando que um script está tentando fechar a janela. Isso será muito amador-ish para o usuário e pode fazê-los pensar duas vezes antes de voltar.

Então, se você está disposto a colocar-se com um atraso, eu tinha acabado de evitar toda essa confusão Javascript totalmente e confiar em uma solução do lado do servidor puro utilizando Session_End (). Afinal, se um usuário fecha a janela ou folhas, ASP.NET irá , eventualmente aviso porque a sessão será tempo limite.

Outras dicas

Session_End irá lidar com o tempo da sessão a questão. No entanto, isso não irá disparar quando o usuário fecha o navegador ou se move para uma URL diferente. Ele espera até que o tempo limite da sessão expirar.

A fim de detectar as outras condições, você terá que usar javascript no cliente. No entanto, estes métodos nem sempre são confiáveis, dependendo do navegador / versão, etc. Além disso, se computador é desligado do usuário para baixo, é desconectado, ou que de outra forma completamente ir embora esse script não irá fogo.

Você pode considerar outras alternativas. O que exatamente você está tentando realizar com esta função?

A web é apátrida para que você não vai saber se o usuário tenha fechado a janela do navegador. Você pode usar o evento 'Session_End' no arquivo global de tempo limite de sessão. Se você quer acesso a todas as sessões, você pode armazená-los em uma coleção através do evento 'Session_Start', também no arquivo mundial ..

Edit: Se você quiser interceptar o próximo evento de uma página usando javascript, aqui está como (nota, este não é confiável):

window.onbeforeunload = closeIt;

function closeIt(){ 


  return "You have unsaved changes. Are you sure you want to leave this page?";

}

Você poderia ter um BasePage que é herdado por cada página aspx e em sua página base evento init apenas verificar se há uma variável de sessão para nada. Se isso não é nada, então isso significa sessão expirou e você pode redirecionar usuário para uma página de login.

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