Domanda

Qual è la differenza tra il distruggere una sessione e la rimozione dei suoi valori?Si può fornire un esempio che dimostra questo?

Ho cercato questa domanda, ma non afferrare risposta totale.Alcune risposte sono:

  • Session.Abandon() distrugge la sessione
  • Session.Clear() solo rimuove tutti i valori

Un amico mi ha detto questo:

Deselezionando la sessione sarà annullata la sessione, che esiste ancora con il stesso ID per l'utente, ma con la valori semplicemente cancellato.

Abbandonare distruggere la sessione completamente, il che significa che avete bisogno di iniziare una nuova sessione, prima di poter memorizzare più valori nella sessione per l'utente.

Il seguente codice funziona e non buttare le eccezioni.

Session.Abandon();
Session["tempKey1"] = "tempValue1";

Quando si Abbandona() di una Sessione (o piuttosto l'utente) si ottiene una nuova SessionId

Quando mi Sessione di test, non fa alcun cambiamento quando mi Abbandonare la sessione.

Ho appena trovato una differenza:session.Abandon() solleva Session_End evento

È stato utile?

Soluzione

Chiaro - Rimuove tutte le chiavi e i valori dalla sessione-collezione di stato.

Abbandonare - rimuove tutti gli oggetti memorizzati in una Sessione.Se non si chiama il metodo di Abbandono in modo esplicito, il server rimuove questi oggetti e distrugge la sessione quando la sessione scade.
Si pone anche eventi come Session_End.

La sessione.Chiaro, può essere paragonato a la rimozione di tutti i libri dallo scaffale, durante la Sessione.Abbandonare è più come buttare via l'intero scaffale.

Tu dici:

Quando mi Sessione di test, non fa alcun cambiamento quando mi Abbandonare la sessione.

Questo è corretto mentre si sta facendo all'interno di una richiesta.
Per la richiesta successiva sessione sarà diverso.Ma il ID di sessione può essere riutilizzato in modo che l'id rimane la stessa.

Se si utilizza la Sessione.Chiaro si avrà la stessa sessione molte richieste.

Generalmente, nella maggior parte dei casi è necessario utilizzare la Sessione.Chiaro.
È possibile utilizzare la Sessione.Abbandonare se sei sicuro che l'utente sta per lasciare il vostro sito.

Per cui, tornando alle differenze:

  1. Abbandonare solleva Session_End richiesta.
  2. Chiaro rimuove gli elementi da subito, Abbandonare non.
  3. Abbandonare rilascia l'oggetto SessionState e i suoi elementi in modo che si possono ba immondizia raccolti per liberare risorse.Chiara mantiene SessionState e risorse associate.

Altri suggerimenti

Quando si Abandon() una sessione, è (o meglio l'utente) si ottiene una nuova SessionId (per la richiesta successiva). Quando si Clear() una sessione, tutti i valori memorizzati vengono rimossi, ma il SessionId rimane intatto.

Questa è sort di coperta dalle varie risposte di cui sopra, ma la prima volta che ho letto questo articolo mi mancava un fatto importante, che ha portato ad un bug minore nel mio codice ...

Session.Clear() cancellerà i valori di tutte le chiavi, ma non causerà l'evento finale di sessione al fuoco.

Session.Abandon() NON cancellare i valori in merito alla richiesta corrente. Se viene richiesta un'altra pagina, i valori saranno andati per quello. Tuttavia, abbandono getteremo l'evento.

Quindi, nel mio caso (e forse nel tuo?), Avevo bisogno Clear() seguito da Abandon().

  

questo codice funziona e non lo gettare alcuna eccezione:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

E 'perché quando il metodo Abandon viene chiamato, l'oggetto della sessione corrente è in coda per l'eliminazione, ma non è in realtà eliminato fino a quando tutti i comandi script nella pagina corrente sono stati elaborati. Ciò significa che è possibile accedere alle variabili memorizzate nell'oggetto Session sulla stessa pagina come la chiamata al metodo Abandon, ma non in tutte le pagine Web successive.

Ad esempio, nello script seguente, la terza linea stampa il valore di Maria. Questo perché l'oggetto di sessione non viene distrutto fino a quando il server ha terminato l'elaborazione dello script.

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>

Se si accede al MyName variabile in una pagina Web successiva, è vuota. Questo è perché MyName stato distrutto con l'oggetto Session precedente quando la pagina, contenente l'esempio precedente terminata l'elaborazione.

MSDN Session.Abandon

Cancellazione di una sessione rimuove i valori che sono stati memorizzati lì, ma è ancora possibile aggiungerne di nuovi lì. Dopo aver distrutto la sessione non è possibile aggiungere nuovi valori lì.

chiara la sua chiave rimuovere o valori da collezione lo stato della sessione ..

abbandonare-suoi rimuovere o cancellati oggetti di sessione dalla sessione ..

Session.Abandon() 

distruggerà / uccidere l'intera sessione.

Session.Clear()

rimuove / cancella i dati della sessione (cioè le chiavi ei valori della sessione corrente) ma la sessione sarà vivi.

Confronto a Session.Abandon () il metodo, Session.clear () non crea la nuova sessione, è solo fare tutte le variabili nella sessione NULL.

Session ID rimarrà lo stesso in entrambi i casi, a patto che il browser non viene chiuso.

Session.RemoveAll()

Si rimuove tutte le chiavi ed i valori della collezione dello stato sessione.

Session.Remove()

Si elimina un elemento dalla collezione dello stato sessione.

Session.RemoveAt()

Si elimina un elemento in corrispondenza dell'indice specificato dall'insieme dello stato sessione.

Session.TimeOut()

Questa proprietà specifica il periodo di timeout assegnato all'oggetto di sessione per l'applicazione. (Il tempo sarà specificato in minuti).

Se l'utente non si aggiorna o richiedere una pagina all'interno del periodo di timeout, quindi la sessione termina.

L'esistenza di sessionid può causare l'attacco di fissaggio sessione che è uno dei punti di conformità PCI. Per rimuovere il SessionID e superare l'attacco sessione di fissazione, di leggere questa soluzione - Come evitare la vulnerabilità fissazione di sessione in ASP.NET? .

Credo che sarebbe utile utilizzare Session.Clear() piuttosto che utilizzare Session.Abandon().

Perché esistono ancora i valori in sessione dopo aver chiamato più tardi, ma vengono rimossi dopo aver chiamato l'ex.

this code works and dont throw any exception:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

Una cosa da notare qui che Session.clear rimuovere immediatamente gli elementi ma Session.Abandon segna la sessione di essere abbandonato alla fine della richiesta corrente. Ciò significa semplicemente che supponiamo si è tentato di accedere valore nel codice subito dopo il comando Session.Abandon è stato eseguito, sarà ancora lì. Quindi non confondersi se il codice è solo non funziona anche dopo l'emissione dei comandi Session.Abandon e subito fare un po 'di logica con la sessione.

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