Il timeout della sessione ASP.Net Inproc viene ripristinato se si accede a SessionID?

StackOverflow https://stackoverflow.com/questions/625782

  •  05-07-2019
  •  | 
  •  

Domanda

Ho letto qui che una sessione inproc asp.net reimposta è timeout ogni volta che si accede (lettura o scrittura). La mia domanda è: se il timeout viene ripristinato anche se leggo solo ID sessione?

Esempio: il timeout della sessione è impostato su 20 min. Dopo 15 minuti di inattività carico una pagina e leggo Session.SessionID. La sessione esisterà ancora dopo altri 10 minuti?

E un'altra domanda: importa se la pagina viene caricata direttamente o accede tramite AJAX?

È stato utile?

Soluzione

Mi sembra che tu stia mescolando due cose diverse: Leggere un valore dallo stato Session (nel codice) differisce dal collegare un'istanza di SessionState alla richiesta corrente.

A meno che non mi sbagli di grosso, il timeout non viene aggiornato ogni volta che si accede a un oggetto Session (di nuovo, nel codice), ma viene aggiornato quando viene fornita una nuova richiesta. Ciò accade perché l'elemento SessionState viene aggiunto alla cache (e viene impostata la politica di scadenza)

Quindi, per rispondere alla tua domanda: il timeout non verrà ripristinato.

Per approfondire l'esempio che hai fornito: il timeout verrà ripristinato sul caricamento della pagina, piuttosto che quando leggi il SessionID nel codice.

Altri suggerimenti

L'accesso a SessionID non influisce sul timeout della sessione. Se dai un'occhiata a Reflector, la proprietà SessionID (implementata in HttpSessionStateContainer) è simile al seguente:

public string SessionID
{
    get
    {
        if (this._id == null)
        {
            this._id = this._stateModule.DelayedGetSessionId();
        }
        return this._id;
    }
}

Che non tocca gli oggetti memorizzati sottostanti.

Inoltre, a quel livello non importa da dove provenga la richiesta (ajax / normal).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top