Pergunta

Eu estou tentando determinar quanto tempo é deixado em uma determinada sessão ASP.NET até que ela expire.

Se não houver prontamente disponível valor time-to-timeout, eu poderia também calculá-lo a partir de seu último tempo de acesso (mas eu não achei isso também). Alguma idéia de como fazer isso?

Foi útil?

Solução

Se você está no servidor, o processamento do pedido, em seguida, o tempo de espera foi apenas redefinido para que os completos 20 minutos (ou o que você configurou) permanecem.

Se você quiser um aviso do lado do cliente, você precisará criar algum código javascript que vai disparar cerca de 20 minutos do "agora". Veja o método setTimeout.

Eu tenho usado isso para exibir um aviso, a 15 minutos depois que a página foi solicitada. Ele aparece um alerta como "sua sessão irá expirar em {HH: mm}, por favor, salve o seu trabalho". O tempo exato foi utilizado em vez de "em 5 minutos" como você nunca sabe quando o usuário verá a mensagem (que ele retornar ao seu computador 10 minutos após o alerta demitido?).

Outras dicas

Para multi-page solução pode-se economizar última vez pedido no cookie e javascript pode considerar este último tempo de acesso para manipulação de mensagem de aviso ou de login fora de ação.

Você pode obter o tempo limite em minutos a partir de:

Session.Timeout

Não é este o suficiente para fornecer as informações, como o tempo limite é redefinir cada pedido? Não sei como você quer mostrar este sem fazer um pedido?

De qualquer forma, o melhor caminho é em cada solicitação definindo alguns variável de sessão com o último tempo de acesso. Que deve fornecer as informações sobre remoto.

acabo implementou uma solução como a que perguntou sobre aqui e parece trabalho. Tenho uma aplicação MVC e tenho esse código em minha página _Layout.chtml mas poderia trabalhar em um aplicativo asp.net, colocando-o na página mestra eu pensaria. Eu estou usando armazenamento de sessão local via o plugin amplify.js. I usar o armazenamento de sessão local porque, como diz o Sr. Grieves poderia haver uma situação onde um usuário está acessando o aplicativo de uma forma que não cause uma atualização de página ou redirecionamento mas ainda redefine o tempo limite da sessão no servidor.

$(document).ready(function () {

var sessionTimeout = '@(Session.Timeout)'; //from server at startup
amplify.store.sessionStorage("sessionTimeout", sessionTimeout);
amplify.store.sessionStorage("timeLeft", sessionTimeout);
setInterval(checkSession, 60000); // run checkSession this every 1 minute
    function checkSession() {
    var timeLeft = amplify.store.sessionStorage("timeLeft");
    timeLeft--; // decrement by 1 minute
    amplify.store.sessionStorage("timeLeft", timeLeft);
        if (timeLeft <= 10) {
        alert("You have  " + timeLeft + " minutes before session timeout. ");
                   }
     }
});

Então, em uma página onde os usuários nunca causar uma atualização de página, mas ainda bateu o servidor causando uma redefinição de sua sessão eu colocar isso em um evento de clique de botão:

$('#MyButton').click(function (e) {

   //Some Code that causes session reset but not page refresh here
    amplify.store.sessionStorage("sessionTimeout", 60); //default session timeout
    amplify.store.sessionStorage("timeLeft", 60);


});

Usando armazenamento de sessão local permite que meu código _Layout.chtml para ver que a sessão foi redefinida aqui, embora uma página nunca foi atualizado ou redirecionados.

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