Perché mai utilizzare oggetto di archiviazione ViewState di asp.net sopra l'oggetto di archiviazione di sessione?

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

Domanda

Oltre a causa di stoccaggio sessione è session-globale per più di una pagina, perché mai voler utilizzare il ViewState per contenere i valori?

Sembra sorta di ridicolo per inviare qualsiasi tipo di informazione diversa da una piccola stringa di query pochi come valori, avanti e indietro dal client al server. Voglio dire che uno spreco di larghezza di banda (!), Semplicemente a fini di stoccaggio. La sessione, mentre globale su più pagine, sembra completamente superiore alternativa al ViewState.

In particolare con controlli AJAX ASP.NET e varianti, il ViewState potrebbe rapidamente diventare gonfio di monitoraggio dei vari stati e le variabili di tutti questi diversi controlli e gli elementi HTML.

Ma allora perché c'è stoccaggio ViewState per le variabili di pagina e gli oggetti a tutti?

Forse mi manca un altro grande utilizzo per la memorizzazione viewstate della pagina, qualcuno sa qualcosa là fuori?

Grazie per la lettura!

EDIT:. Tutti hanno avuto una grande risposta, scusa se non ho prendo vostro

È stato utile?

Soluzione

Le sessioni si esauriscono, ViewState non - si può tornare indietro un'ora più tardi e il tuo ViewState sarà ancora disponibile. ViewState è anche costantemente disponibili quando si va avanti / indietro sul sito web, i cambiamenti di sessione.

Altri suggerimenti

La ragione per Viewstate o Session è di trasformare il web da un sistema stateless in una dinamica esperienza, personalizzata. Quando un utente richiede una pagina, l'unico modo è possibile riprendere in cui l'utente ha lasciato fuori nella loro esperienza è quello di ricordare lo stato sia sul server o sul client dell'utente.

ViewState è un meccanismo per ricordare lo stato dell'utente sul client. Session è un meccanismo per ricordare lo stato dell'utente sul server.

Viewstate è un meccanismo di memorizzazione transitoria. I controlli che utilizzano ViewState hanno il loro stato reso nella pagina html come ingresso nascosto. Per evitare manomissioni, è firmato. E non è crittografato, tuttavia, in modo probabilmente si vuole evitare di mettere qualcosa sensibili in là. ViewState è utile per le situazioni in cui si desidera inviare attraverso una serie di richieste multiple (pagina carichi). Un esempio di questo è quando una forma non convalida perché magari l'utente ha immesso un indirizzo di posta elettronica cattivo o qualcosa del genere, e si desidera ripristinare la forma come lo era prima che l'utente presentato. Gli aspetti negativi di questo è che ViewState è una bestia affamata e può facilmente aggiungere 30-50% alle dimensioni della pagina.

Session, d'altra parte, viene memorizzato sul server. Il cliente ottiene un token che indica al server quale blocco di memoria è loro. Questo può essere molto più sicuro di ViewState perché i dati non viene ritrasmesso per l'utente più e più volte. Ci sono compromessi però. Il server può esaurire la memoria. In alternativa, l'utente potrebbe perdere i dati se la sessione viene interrotta.

In generale, non c'è una risposta "giusta" sulla quale utilizzare. Si tratta solo di ciò che si sta cercando di realizzare.

La maggior parte delle cose da fare con i controlli dovrebbero utilizzare Viewstate. SE hai a che fare con informazioni sensibili tuttavia, considerare sessione. Se si dispone di dati che è per un insieme specifico di pagine, utilizzare ViewState. Se si tratta di dati che sarà necessario durante la visita di un utente sul tuo sito, considier sessione.

Per esempio, quando la vostra applicazione potrebbe essere in esecuzione in una fattoria del computer e non è possibile configurare la sessione per utilizzare il server SQL. (O l'utilizzo del server SQL è troppo di un calo di prestazioni)

ViewState e Session hanno diversi ambiti. ViewState è progettato per memorizzare i dati più o meno transitori, durante "postback", mentre la sessione viene utilizzato per salvare i dati dello stato sessione critici. Mi consiglia di utilizzare ViewState per lo stato relativo ad un specifico "sessione di pagina".

Se non ti piace il normale comportamento del ViewState, è abbastanza semplice per scrivere il proprio PageStatePersister e lasciare che questo oggetto eseguire la persistenza, per esempio utilizzando la sessione, o qualcosa di simile Memcached. È quindi possibile ignorare completamente il meccanismo predefinito di persistenza.

Quindi, la cosa buona è che si può senza problemi continuare ad utilizzare i controlli web standard in .NET Framework, che sarà tutto l'uso ViewState / ControlState per questo tipo di dati, senza gonfiore il ViewState. Un meccanismo di persistenza della memoria del server potrebbe essere molto efficiente.

Non proprio una risposta diretta alla tua domanda, ma può risolvere il problema.

È possibile memorizzare lato server ViewState, eliminando il carico utile per il cliente.

Creare una classe pagina eredita, e ignorare il PageStatePersister. http://msdn.microsoft.com/en- us / library / system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

ViewState è essenzialmente solo un input nascosto che deve essere caricato sul server e analizzato con ogni richiesta. Questo campo è in genere popolato automaticamente, spesso con il programmatore beatamente inconsapevoli, e può crescere abbastanza grande. Per molti siti che presenta un problema, perché anche utenti a banda larga hanno larghezza di banda upstream molto limitato.

Su siti Intranet in cui tutti gli utenti hanno accesso ad alta velocità LAN al server, ma la RAM disponibile per contenere dati di sessione è limitata, può avere più senso.

Non è una risposta alla tua domanda, ma uno dei suoi presupposti non è corretta.

ID di sessione può essere passato nell'URL. Sessione non richiede i cookie.

http://msdn.microsoft.com/en-us/library /aa479314.aspx

<sessionState cookieless="true" />

Si sta facendo un app dove gonfiare ViewState, per la maggior parte, non è un problema, allora è meglio a dati specifici pagina negozio nel ViewState, perché aiuta il server rendimento migliore. Se si va pazzo con la sessione, o qualsiasi caching, del resto, si può farti male di più quindi è aiutare se stessi.

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