É a redefinição de tempo limite de sessão ASP.Net InProc se o SessionID é acessado?
-
05-07-2019 - |
Pergunta
Eu li aqui que um InProc ASP.NET redefine sessão é toda tempo limite que é acessado (leitura ou escrita). A minha pergunta é, se o tempo limite também é reposto se eu só ler o sessionID?
Exemplo: Tempo limite da sessão é definido como 20 min. Após 15 min. de inatividade eu carregar uma página e ler o Session.SessionID. Será que a sessão ainda existir depois de mais 10 min.?
E mais uma pergunta: que importa se a página é carregada directamente ou acessa via AJAX
Solução
Parece-me que você está misturando duas coisas diferentes:. Ler um valor de estado de sessão (em código) difere de anexar uma instância de SessionState para a solicitação atual
A menos que eu esteja muito enganado, o tempo limite não é atualizada sempre que você acessar um objeto Session (novamente, no código), em vez disso, é atualizada quando um novo pedido é servido. Isso acontece porque o item SessionState é em si adicionado ao Cache (e política de expiração é definido)
Assim, para responder sua pergunta:. O tempo limite não serão repostas
Para elaborar o exemplo que você deu:. O tempo limite será redefinido no load da página, em vez de quando você ler o SessionID em código
Outras dicas
Acessando SessionID não afeta tempo limite da sessão. Se você dar uma olhada com refletor, a propriedade SessionID (implementado em HttpSessionStateContainer) parece com isso:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
O que não toque nos itens armazenados subjacentes.
Além disso, nesse nível não importa onde o pedido veio de (Ajax / normal).