Domanda

Sia Session.Clear () che Session.Abandon () eliminano le variabili di sessione. A quanto ho capito, Abandon () termina la sessione corrente e provoca la creazione di una nuova sessione, causando quindi l'attivazione degli eventi End and Start.

Sembra preferibile chiamare Abandon () nella maggior parte dei casi, come disconnettere un utente. Esistono scenari in cui utilizzare Clear () invece? C'è molta differenza nelle prestazioni?

È stato utile?

Soluzione

Session.Abandon () distrugge la sessione e viene attivato Session_OnEnd event .

Session.Clear () solo rimuove tutti i valori (contenuto) dall'oggetto. La sessione con la stessa chiave è ancora attiva.

Quindi, se usi Session.Abandon () , perdi quella sessione specifica e l'utente riceverà una nuova chiave di sessione. Potresti usarlo ad esempio quando l'utente si disconnette.

Utilizzare Session.Clear () , se si desidera che l'utente rimanga nella stessa sessione (se non si desidera riaccedere l'utente, ad esempio) e ripristinare tutti i dati specifici della sessione.

Altri suggerimenti

L'uso di Session.Clear () solo quando un utente si disconnette può creare una falla nella sicurezza. Poiché la sessione è ancora valida per quanto riguarda il Web Server. È quindi una cosa ragionevolmente banale annusare, afferrare l'ID sessione e dirottare quella sessione.

Per questo motivo, quando si disconnette un utente, sarebbe più sicuro e più sensato utilizzare Session.Abandon () in modo che la sessione venga distrutta e venga creata una nuova sessione (anche se la pagina dell'interfaccia utente di logout sarebbe parte della nuova sessione, la nuova sessione non contiene alcun dettaglio degli utenti e dirottare la nuova sessione equivarrebbe ad avere una nuova sessione, quindi sarebbe muta).

Non sono ancora sicuro di quale esempio del mondo reale sia dove useresti Session.Abondon () , Session.Clear () .

Posso capire ... se l'utente fa clic sul collegamento di logout e li porti al tuo " sei stato disconnesso " pagina .... la loro sessione del browser continua ancora ma si desidera rimuovere le informazioni memorizzate nella sessione. Se hai abbandonato la sessione, verrà immediatamente creata una nuova sessione per " sei stato disconnesso " pagina.

Session.Abandon distrugge la sessione come indicato sopra, quindi dovresti usarla quando esci da qualcuno. Penso che un buon uso di Session.Clear sarebbe per un carrello della spesa su un sito Web di e-commerce. In questo modo il cestino viene cancellato senza disconnettere l'utente.

Ho avuto questo problema e ho provato entrambi, ma ho dovuto accontentarmi di rimuovere schifezze come " pageEditState " ;, ma non rimuovere le informazioni utente per non doverle cercare di nuovo.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top