Condividi tramite


Suggerimenti per la gestione dello stato di ASP.NET

Aggiornamento: novembre 2007

La gestione dello stato rappresenta il processo con cui vengono gestite le informazioni sullo stato e sulla pagina attraverso più richieste della stessa pagina o di pagine differenti. Come qualsiasi tecnologia basata su HTTP, le pagine Web Form sono prive di informazioni sullo stato, ovvero non segnalano automaticamente se le richieste in una sequenza provengono tutte dallo stesso client o se una singola istanza del browser continua a visualizzare attivamente una pagina o un sito. Inoltre, le pagine vengono eliminate e ricreate a ogni round trip al server. Pertanto, le informazioni sulle pagine non saranno disponibili oltre il ciclo di vita di una singola pagina. Per ulteriori informazioni sui round trip al server e sul ciclo di vita delle pagine Web Form, vedere Cenni preliminari sul ciclo di vita di una pagina ASP.NET.

In ASP.NET sono disponibili numerosi metodi per la gestione dello stato tra i vari round trip al server. La scelta del metodo da utilizzare dipende essenzialmente dall'applicazione e deve essere basata sui seguenti criteri:

  • Quantità delle informazioni che si desidera archiviare.

  • Accettazione di cookie persistenti o in memoria da parte del client.

  • Archiviazione delle informazioni sul client o sul server.

  • Riservatezza delle informazioni.

  • Criteri relativi alle prestazioni e alla larghezza di banda disponibili per l'applicazione.

  • Funzionalità del browser e delle periferiche desiderate.

  • Necessità di archiviare le informazioni per ogni singolo utente.

  • Permanenza delle informazioni nell'archivio.

  • Presenza di una Web farm (più server), di un Web garden (più processi su un unico computer) o di un singolo processo che serve l'applicazione.

Opzioni di gestione dello stato sul lato client

Per la memorizzazione delle informazioni sulle pagine mediante le opzioni del lato client non vengono utilizzate le risorse server. Sebbene il livello di protezione offerto in genere da queste opzioni sia minimo, le prestazioni del server risultano migliori in quanto la richiesta di risorse server è limitata. Tuttavia, poiché è necessario inviare le informazioni al client affinché vengano memorizzate, esiste un limite pratico alla quantità di informazioni che è possibile memorizzare in questo modo.

Di seguito sono elencate le opzioni di gestione dello stato sul lato client supportate da ASP.NET:

  • ViewState

  • Stato del controllo

  • Campi nascosti

  • Cookies

  • Stringhe di query

Stato di visualizzazione

Per le pagine Web Form è disponibile la proprietà ViewState come struttura incorporata per il mantenimento automatico dei valori tra più richieste della stessa pagina. La proprietà ViewState è gestita come campo nascosto nella pagina. Per ulteriori informazioni, vedere la classe Cenni preliminari sulla gestione dello stato ASP.NET.

È possibile utilizzare la proprietà ViewState per memorizzare i valori specifici delle pagine tra i round trip quando la pagina viene rinviata a se stessa. Se ad esempio l'applicazione conserva le informazioni specifiche dell'utente, ovvero le informazioni utilizzate nella pagina ma che non fanno necessariamente parte dei controlli, sarà possibile archiviarle nello stato di visualizzazione.

Vantaggi dell'utilizzo dello stato di visualizzazione

  • Non è richiesta alcuna risorsa server   Lo stato di visualizzazione è contenuto in una struttura all'interno del codice della pagina.

  • Implementazione semplificata   Lo stato di visualizzazione non richiede l'utilizzo di codice personalizzato. È attivato per impostazione predefinita per gestire i dati di stato sui controlli.

  • Funzionalità di protezione avanzate   Per i valori nello stato di visualizzazione viene generato un hash, vengono compressi e codificati per le implementazioni Unicode, fornendo in tal modo uno stato di protezione più elevato rispetto ai campi nascosti.

Svantaggi dell'utilizzo dello stato di visualizzazione:

  • Considerazioni sulle prestazioni   Poiché lo stato di visualizzazione viene archiviato nella pagina stessa, l'archiviazione di valori di grandi dimensioni può rallentare la visualizzazione e l'invio della pagina, soprattutto nel caso di dispositivi portatili, nei quali la larghezza di banda rappresenta spesso un limite.

  • Limitazioni dei dispositivi   La capacità di memoria dei dispositivi portatili può non essere sufficiente per l'archiviazione di grandi quantità di dati relativi allo stato di visualizzazione.

  • **Potenziali rischi di protezione   **Lo stato di visualizzazione viene archiviato in uno o più file nascosti nella pagina. Sebbene i dati nello stato di visualizzazione vengano archiviati in un formato con hashing, è comunque possibile alterarli. Le informazioni nel campo nascosto sono visualizzabili se l'origine dell'output della pagina viene visualizzata direttamente, creando potenziali problemi di protezione. Per ulteriori informazioni, vedere Protezione delle applicazioni Web ASP.NET e Suggerimenti di base sulla protezione delle applicazioni Web.

Stato del controllo

Il framework di pagina ASP.NET fornisce la proprietà ControlState come mezzo per archiviare dati relativi a controlli personalizzati tra i round trip al server. Ad esempio, se è stato scritto un controllo personalizzato che comprende più schede con informazioni differenti, per funzionare correttamente il controllo deve sapere qual è la scheda selezionata tra i vari round trip. Lo stato di visualizzazione può essere utilizzato a questo scopo, ma gli sviluppatori possono disattivarlo a livello di pagina, interrompendo in pratica il controllo. Contrariamente allo stato di visualizzazione, lo stato del controllo non può essere disattivato e fornisce così un metodo più sicuro per l'archiviazione dei dati.

Vantaggi dell'utilizzo dello stato del controllo:

  • Non è richiesta alcuna risorsa server   Per impostazione predefinita, lo stato del controllo viene archiviato in file nascosti nella pagina.

  • Affidabilità   Poiché non può essere disattivato come lo stato di visualizzazione, lo stato del controllo rappresenta un metodo più affidabile per la gestione dello stato dei controlli.

  • Versatilità   Per controllare come e dove vengono archiviati i dati sullo stato del controllo, è possibile scrivere degli adattatori personalizzati.

Svantaggi dell'utilizzo dello stato del controllo:

  • Sono richieste attività di programmazione   Mentre il framework di pagina ASP.NET fornisce una base per lo stato del controllo, quest'ultimo è un meccanismo di stato-persistenza personalizzato. Per poter utilizzare interamente lo stato del controllo, è necessario scrivere del codice per consentirne il salvataggio e il caricamento.

Campi nascosti

Per gestire lo stato della pagina, è possibile memorizzare le informazioni specifiche sulla pagina in un campo nascosto della pagina stessa. Per ulteriori informazioni sui campi nascosti, vedere Suggerimenti per la gestione dello stato di ASP.NET.

Se si utilizzano i campi nascosti, si consiglia di memorizzare solo piccole quantità di dati modificati di frequente sul client.

Nota:

Se si utilizzano i campi nascosti, è necessario inviare le pagine al server mediante il metodo HTTP POST anziché richiedere la pagina mediante l'URL della pagina (il metodo HTTP GET).

Vantaggi dell'utilizzo dei campi nascosti:

  • Non è richiesta alcuna risorsa server   Il campo nascosto viene archiviato e letto dalla pagina.

  • Supporto Widespread    Quasi tutti i browser e i dispositivi client supportano forme con campi nascosti.

  • Implementazione semplice   I campi nascosti sono controlli HTML standard che non richiedono logica di programmazione complessa.

Svantaggi dell'utilizzo dei campi nascosti:

  • Potenziali rischi di protezione   Il campo nascosto può venire alterato. Le informazioni nel campo nascosto sono visualizzabili se l'origine dell'output della pagina viene visualizzata direttamente, creando potenziali problemi di protezione. Sebbene il contenuto di un campo nascosto possa essere crittografato e decrittografato manualmente, questa operazione richiede della codifica supplementare e un sovraccarico. In caso di problemi di protezione, valutare l'opportunità di utilizzare un meccanismo di stato basato su server, in modo che al client non vengano inviate informazioni riservate. Per ulteriori informazioni, vedere Protezione delle applicazioni Web ASP.NET e Suggerimenti di base sulla protezione delle applicazioni Web.

  • Semplice architettura di archiviazione   I campi nascosti non supportano tipi di dati complessi e offrono un singolo campo di valori stringa in cui inserire le informazioni. Per memorizzare più valori, è necessario implementare stringhe delimitate e il codice per l'analisi di tali stringhe. I tipi di dati complessi possono essere serializzati in campi nascosti o deserializzati da campi nascosti in modo manuale. Questa operazione richiede tuttavia l'utilizzo di codice supplementare. Se è necessario archiviare tipi di dati complessi sul client, considerare l'utilizzo dello stato di visualizzazione nel quale è incorporata una funzionalità di serializzazione e i dati vengono archiviati in campi nascosti.

  • Considerazioni sulle prestazioni   Poiché i campi nascosti vengono archiviati nella pagina stessa, l'archiviazione di valori di grandi dimensioni potrebbe rallentare la visualizzazione e l'invio della pagina.

  • Limitazioni di archiviazione   Se la quantità di dati in un campo nascosto diventa molto elevata, alcuni proxy e firewall impediranno l'accesso alla pagina che li contiene. Poiché la quantità massima può variare con l'implementazione di firewall e proxy differenti, in alcuni casi i campi nascosti di grandi dimensioni possono risultare problematici. Se occorre archiviare molti elementi di dati, considerare una delle procedure elencate di seguito:

    • Inserire ciascun elemento in un campo nascosto distinto.

    • Utilizzare lo stato di visualizzazione con attivata la funzionalità di chunking, che separa automaticamente i dati in più campi nascosti.

    • Anziché archiviare i dati sul client, renderli permanenti sul server. Maggiore è il numero di dati inviati al client, maggiormente lungo sarà il tempo di risposta apparente dell'applicazione in quanto il browser dovrà scaricare o inviare una maggiore quantità di dati.

Cookies

I cookie risultano utili per memorizzare sul client piccole quantità di informazioni modificate di frequente. Le informazioni vengono inviate con la richiesta al server. Per informazioni dettagliate sulla creazione e la lettura di cookie, vedere Cenni preliminari sui cookie ASP.NET.

Vantaggi dell'utilizzo dei cookie:

  • Regole di scadenza configurabili   Il cookie può scadere al termine della sessione del browser oppure durare per un periodo di tempo indefinito sul computer client, a seconda delle regole di scadenza specifiche.

  • Non è richiesta alcuna risorsa server   Il cookie viene archiviato sul client e letto dal server dopo un invio.

  • Semplicità   Il cookie è una struttura basata su testo, leggera, con coppie chiave-valore semplici.

  • Persistenza dei dati   Sebbene la durata del cookie su un computer client dipenda dai processi di scadenza impostati sul client e dall'intervento dell'utente, i cookie rappresentano in genere la forma più durevole di persistenza dei dati sul client.

Svantaggi dell'utilizzo dei cookie:

  • Limitazioni nelle dimensioni   Per la maggior parte dei browser, per la dimensione di un cookie è imposto il limite di 4096 byte, anche se le nuove versioni dei browser e delle periferiche client attualmente disponibili forniscono in genere il supporto per dimensioni del cookie pari a 8192 byte.

  • Rifiuto configurato dall'utente   Alcuni utenti disattivano la capacità di ricevere cookie dei browser o delle periferiche client, limitando così tale funzionalità.

  • Potenziali rischi di protezione   I cookie sono soggetti ad alterazione. Gli utenti possono manipolare i cookie sui computer locali, compromettendo la protezione o causando il blocco dell'applicazione dipendente dal cookie. Inoltre, sebbene i cookie siano accessibili solo dal dominio che li ha inviati al client, qualche hacker riesce comunque ad accedere da altri domini sul computer di un utente. I cookie possono essere crittografati e decrittografati manualmente, ma questa operazione richiede codice supplementare e può compromettere le prestazioni dell'applicazione a causa del tempo necessario per la crittografia e decrittografia. Per ulteriori informazioni, vedere Protezione delle applicazioni Web ASP.NET e Suggerimenti di base sulla protezione delle applicazioni Web.

    Nota:

    I cookie vengono spesso utilizzati per la personalizzazione, laddove il contenuto viene personalizzato per un utente conosciuto. Nella maggior parte di questi casi, il problema è rappresentato dall'identificazione piuttosto che dall'autenticazione. In genere è possibile proteggere un cookie che viene utilizzato per l'identificazione archiviando nel cookie il nome utente, il nome account o un ID utente univoco (ad esempio un GUID), quindi utilizzando il cookie per accedere all'infrastruttura di personalizzazione dell'utente di un sito.

Stringhe di query

Una stringa di query rappresenta le informazioni accodate all'URL di una pagina. Per ulteriori informazioni, vedere Cenni preliminari sulla gestione dello stato ASP.NET.

È possibile utilizzare una stringa di query per rinviare i dati alla pagina in uso o a un'altra pagina mediante l'URL. Le stringhe di query forniscono un metodo semplice ma limitato per gestire alcune informazioni sullo stato. Consentono di spostare in modo semplice le informazioni da una pagina all'altra, ad esempio passare un numero di prodotto da una pagina a un'altra in cui verrà elaborato.

Vantaggi dell'utilizzo di stringhe di query:

  • Non è richiesta alcuna risorsa server   La stringa di query è contenuta nella richiesta HTTP per un URL specifico.

  • Supporto Widespread   La maggior parte dei browser e dei dispositivi client supporta l'utilizzo di stringhe di query per il passaggio dei valori.

  • Implementazione semplice   In ASP.NET è fornito il supporto completo per il metodo delle stringhe di query, compresi i metodi per la lettura delle stringhe mediante la proprietà Params dell'oggetto HttpRequest.

Svantaggi dell'utilizzo di stringhe di query:

  • Potenziali rischi di protezione   Le informazioni nella stringa di query sono visibili all'utente direttamente mediante l'interfaccia utente del browser. Un utente può utilizzare l'URL come segnalibro o inviare l'URL ad altri utenti, passando così anche le informazioni incluse nella stringa di query. Per evitare rischi di protezione dei dati sensibili nella stringa di query, valutare l'opportunità di utilizzare campi nascosti in un form che utilizzi POST anziché stringhe di query. Per ulteriori informazioni, vedere Protezione delle applicazioni Web ASP.NET e Suggerimenti di base sulla protezione delle applicazioni Web.

  • Capacità limitata   Alcuni browser e dispositivi client impongono un limite di 2083 caratteri per la lunghezza degli URL.

Riepilogo dei metodi di gestione dello stato sul lato client

Nella tabella riportata di seguito sono elencate le opzioni di gestione dello stato del lato client disponibili in ASP.NET. Vengono inoltre forniti suggerimenti per l'utilizzo di ciascuna opzione.

Opzione di gestione dello stato

Utilizzo consigliato

ViewState

Quando è necessario archiviare quantità limitate di informazioni relative a una pagina che verrà rinviata a se stessa. L'utilizzo della proprietà ViewState fornisce funzionalità di protezione di base.

Stato del controllo

Quando è necessario archiviare piccole quantità di informazioni relative allo stato di un controllo tra i vari round trip al server.

Campi nascosti

Quando è necessario archiviare piccole quantità di informazioni relative a una pagina che verrà rinviata a se stessa o a un'altra pagina e non esistono problemi di protezione.

Nota:
È possibile utilizzare i campi nascosti solo nelle pagine inviate al server.

Cookies

Quando è necessario archiviare piccole quantità di informazioni sul client e non esistono problemi di protezione.

Stringhe di query

Quando vengono trasferite piccole quantità di informazioni da una pagina all'altra e non esistono problemi di protezione.

Nota:
È possibile utilizzare le stringhe di query solo se si richiede la stessa pagina o un'altra pagina mediante un collegamento.

Opzioni di gestione dello stato sul lato server

Le opzioni del lato server per l'archiviazione delle informazioni relative alle pagine forniscono un livello di protezione più elevato rispetto alle opzioni del lato client, ma possono utilizzare più risorse del server Web, generando problemi di scalabilità nel caso in cui l'archivio informazioni sia di grandi dimensioni. In ASP.NET sono disponibili diverse opzioni per l'implementazione della gestione dello stato sul lato server. Per ulteriori informazioni, vedere Cenni preliminari sulla gestione dello stato ASP.NET.

Di seguito sono elencate le opzioni di gestione dello stato sul lato server supportate da ASP.NET:

  • Stato applicazione

  • stato sessione

  • Proprietà profilo

  • Supporto database

Stato applicazione

In ASP.NET viene fornito lo stato applicazione tramite la classe HttpApplicationState come metodo per l'archiviazione delle informazioni globali specifiche dell'applicazione che sono visibili all'intera applicazione. Le variabili dello stato applicazione sono in effetti variabili globali per le applicazioni ASP.NET. Per ulteriori informazioni, vedere Cenni preliminari sullo stato delle applicazioni ASP.NET.

È possibile memorizzare i valori specifici dell'applicazione nello stato applicazione, che viene quindi gestito dal server. Per ulteriori informazioni, vedere Cenni preliminari sulla gestione dello stato ASP.NET.

I dati ideali da inserire nelle variabili dello stato applicazione sono i dati condivisi da più sessioni e che non vengono modificati di frequente.

Vantaggi dell'utilizzo dello stato applicazione:

  • Implementazione semplice   Lo stato applicazione è semplice da utilizzare, familiare agli sviluppatori ASP e coerente con altre classi .NET Framework.

  • **Ambito dell'applicazione   **Poiché lo stato applicazione è accessibile a tutte le pagine di un'applicazione, archiviando le informazioni nello stato applicazione si potrà disporre di una sola copia delle informazioni, anziché di diverse copie delle informazioni nello stato sessione o in pagine singole.

Svantaggi dell'utilizzo dello stato applicazione:

  • Ambito dell'applicazione   Anche l'ambito dello stato applicazione può rappresentare uno svantaggio. Le variabili memorizzate nello stato applicazione sono globali solo per lo specifico processo in cui l'applicazione è in esecuzione e ciascun processo dell'applicazione può avere valori differenti. Pertanto, non è possibile utilizzare lo stato applicazione per archiviare valori univoci o aggiornare contatori globali nelle configurazioni server Web garden e Web farm.

  • Durata limitata dei dati   Poiché i dati globali archiviati nello stato applicazione sono volatili, andranno persi nel caso in cui il processo server Web che lo contiene venga eliminato, ad esempio a causa di arresto anomalo, aggiornamento o chiusura del server.

  • Risorse necessarie   Lo stato applicazione utilizza la memoria del server e può quindi compromettere le prestazioni del server e la scalabilità dell'applicazione.

La progettazione e l'implementazione accurate dello stato applicazione possono migliorare le prestazioni delle applicazioni Web. L'inserimento di un dataset di uso frequente e relativamente statico nello stato applicazione può ad esempio migliorare le prestazioni del sito riducendo il numero totale delle richieste dei dati a un database. Esiste tuttavia un compromesso in termini di prestazioni. Le variabili dello stato applicazione contenenti blocchi di informazioni di grandi dimensioni riducono le prestazioni del server Web e aumentano il carico del server. La memoria occupata da una variabile memorizzata nello stato applicazione non viene rilasciata fino a quando il valore non viene rimosso o sostituito. Si consiglia quindi di utilizzare le variabili dello stato applicazione solo con dataset di piccole dimensioni e non modificati di frequente. Per ulteriori informazioni, vedere la classe Cenni preliminari sulle prestazioni.

Stato sessione

In ASP.NET viene fornito uno stato sessione, disponibile come classe HttpSessionState, come metodo per l'archiviazione di informazioni specifiche della sessione che sono visibili solo all'interno della sessione. Lo stato sessione di ASP.NET identifica come sessione le richieste provenienti dallo stesso browser entro un intervallo di tempo limitato e può ripresentare valori variabili per la durata di tale sessione. Per ulteriori informazioni, vedere°Cenni preliminari sulla gestione dello stato ASP.NET e Cenni preliminare sullo stato della sessione ASP.NET.

È possibile memorizzare gli oggetti e i valori specifici delle sessioni nello stato sessione, che viene quindi gestito dal server e reso disponibile al browser o alla periferica client. I dati ideali da memorizzare nelle variabili dello stato sessione sono dati temporanei, riservati e specifici di una singola sessione.

Vantaggi dell'utilizzo dello stato sessione:

  • Implementazione semplice   La funzionalità stato sessione è semplice da utilizzare, familiare agli sviluppatori ASP e coerente con altre classi .NET Framework.

  • Eventi specifici della sessione   Eventi di gestione della sessione possono essere generati e utilizzati dall'applicazione.

  • Persistenza dei dati   I dati archiviati nelle variabili dello stato sessione non vanno persi in caso di ravvio di Internet Information Services (IIS) e dei processi di lavoro in quanto i dati vengono archiviati nello spazio di un altro processo. I dati relativi allo stato sessione possono inoltre essere resi permanenti tra più processi, ad esempio in una Web Farm o un Web Garden.

  • Scalabilità della piattaforma   Lo stato sessione può essere utilizzato in configurazioni multicomputer e multiprocesso, ottimizzando in tal modo la scalabilità.

  • Supporto per sessioni senza cookie   Lo stato sessione funziona con browser che non supportano cookie HTTP, anche se viene in genere utilizzato con i cookie per fornire le funzionalità di identificazione dell'utente a un'applicazione Web. L'utilizzo dello stato sessione senza cookie richiede tuttavia la specifica dell'identificatore di sessione nella stringa di query, che presenta i problemi di protezione analizzati nella sezione relativa all'utilizzo delle stringhe di query nel presente argomento. Per ulteriori informazioni sull'utilizzo dello stato sessione senza cookie, vedere Amministrazione di siti Web ASP.NET.

  • Estensibilità   È possibile personalizzare ed estendere lo stato sessione definendo un provider dello stato sessione personalizzato. I dati dello stato sessione potranno quindi essere archiviati in un formato personalizzato in diversi meccanismi di archiviazione, ad esempio un database, un file XML o un servizio Web. Per ulteriori informazioni, vedere la classe Implementazione di un provider dell'archivio dello stato sessione.

Svantaggi dell'utilizzo dello stato sessione:

  • Considerazioni sulle prestazioni   Le variabili dello stato sessione restano in memoria fino a quando non vengono rimosse o sostituite e pertanto possono ridurre le prestazioni del server. Le variabili dello stato sessione contenenti blocchi di informazioni, quali dataset di grandi dimensioni, possono influire negativamente sulle prestazioni del server Web in caso di aumento del carico del server.

Proprietà profilo

ASP.NET include una funzionalità denominata proprietà profilo, che consente l'archiviazione di dati specifici degli utenti. È simile allo stato sessione, tranne per il fatto che allo scadere della sessione utente i dati relativi al profilo non vanno persi. La funzionalità proprietà profilo utilizza un profilo ASP.NET che viene archiviato in un formato persistente e associato a un singolo utente. Il profilo ASP.NET consente di gestire le informazioni relative all'utente senza richiedere la creazione e la gestione di un database specifico. Inoltre, il profilo rende disponibili le informazioni utente tramite un'API fortemente tipizzata accessibile da qualsiasi punto dell'applicazione. Nel profilo è possibile archiviare oggetti di qualsiasi tipo. Il profilo ASP.NET fornisce un sistema di archiviazione generico che consente di definire e gestire praticamente qualsiasi tipo di dati mantenendo comunque disponibili i dati in modo indipendente dai tipi. Per ulteriori informazioni, vedere la classe Cenni preliminari sulle proprietà dei profili ASP.NET.

Vantaggi delle proprietà profilo:

  • Persistenza dei dati   I dati immessi nelle proprietà di un profilo vengono mantenuti per tutte le procedure di riavvio di IIS e dei processi di lavoro senza alcuna perdita di dati in quanto questi ultimi vengono archiviati in un meccanismo esterno. Le proprietà del profilo possono inoltre essere rese permanenti tra più processi, ad esempio in una Web farm o un Web garden.

  • Scalabilità della piattaforma   Le proprietà del profilo possono essere utilizzate in configurazioni multicomputer e multiprocesso, ottimizzando in tal modo la scalabilità.

  • Estensibilità   Per poter utilizzare le proprietà del profilo, è necessario configurare un provider di profili. ASP.NET include una classe SqlProfileProvider che consente di archiviare i dati relativi ai profili in un database SQL. È comunque possibile creare una classe di provider di profili personalizzata in cui vengano archiviati i dati relativi al profilo in un formato personalizzato e su un meccanismo di archiviazione personalizzato, ad esempio un file XML o anche un servizio Web. Per ulteriori informazioni, vedere Provider di profili ASP.NET e Implementazione di un provider di profili.

Svantaggi dell'utilizzo delle proprietà profilo:

  • Considerazioni sulle prestazioni   La funzionalità Proprietà profilo risulta in genere più lenta rispetto allo stato sessione in quanto i dati vengono resi permanenti in un archivio dati e non in memoria.

  • Requisiti di configurazione aggiuntivi   Diversamente dallo stato sessione, la funzionalità Proprietà profilo richiede l'utilizzo di una quantità considerevole di impostazioni di configurazione. Per utilizzare questa funzionalità, non solo è necessario configurare un provider di profili, ma anche preconfigurare tutte le proprietà del profilo che si desidera archiviare. Per ulteriori informazioni, vedere°Cenni preliminari sulle proprietà dei profili ASP.NET e Definizione delle proprietà dei profili ASP.NET.

  • **Gestione dei dati   **Le proprietà del profilo richiedono alcune operazioni di gestione. Dal momento che i dati relativi al profilo vengono resi permanenti in sistemi di archiviazione non volatili, occorre assicurarsi che l'applicazione chiami i meccanismi di pulitura appropriati, forniti dal provider di profili, quando i dati non risultano più aggiornati.

Supporto database

È possibile che in alcuni casi si desideri utilizzare il supporto del database per la gestione dello stato in un sito Web. In genere, il supporto del database viene utilizzato insieme ai cookie o allo stato sessione. Ad esempio, le informazioni relative allo stato di siti Web di e-commerce vengono spesso gestite tramite un database relazionale per i seguenti motivi:

  • Protezione

  • Personalizzazione

  • Coerenza

  • Data mining

Di seguito sono illustrate le funzionalità tipiche di un sito Web con cookie supportati da una database:

  • Protezione   Il visitatore digita il nome e la password dell'account in una pagina di accesso al sito. L'infrastruttura del sito esegue una query sul database con i valori di accesso forniti per determinare se l'utente dispone dei diritti per l'utilizzo del sito. Se il database convalida le informazioni dell'utente, il sito Web distribuirà un cookie valido contenente un ID univoco per l'utente dello specifico computer client. All'utente viene concesso l'accesso al sito.

  • Personalizzazione   Una volta specificate le informazioni di protezione, il sito è in grado di distinguere ciascun utente mediante la lettura del cookie sul computer client. In genere, i siti includono nel database le informazioni che descrivono le preferenze di un utente (identificato da un ID univoco). Questa relazione è nota come personalizzazione. Il sito può eseguire una ricerca delle preferenze dell'utente mediante l'ID univoco contenuto nel cookie e inserire quindi davanti all'utente il contenuto e le informazioni relative ai desideri dell'utente, rispondendo così alle preferenze dell'utente nel tempo.

  • Coerenza   Se è stato creato un sito Web commerciale, può essere opportuno conservare nel sito i record delle transazioni di acquisto di beni e servizi. È possibile salvare in modo affidabile tali informazioni nel database e fare riferimento a esse mediante l'ID univoco dell'utente. Le informazioni possono essere utilizzate per verificare il completamento di una transazione di acquisto e per determinare l'azione da intraprendere in caso di errore di una transazione di acquisto. Queste informazioni possono essere utilizzate anche per informare l'utente dello stato di un ordine effettuato mediante il sito.

  • Data mining   Le informazioni relative all'utilizzo del sito, ai visitatori o alle transazioni dei prodotti possono essere archiviate in modo affidabile in un database. È ad esempio possibile che il reparto per lo sviluppo aziendale desideri utilizzare i dati raccolti dal sito per determinare i criteri di distribuzione e la linea dei prodotti dell'anno successivo. È possibile che il reparto marketing desideri esaminare le informazioni demografiche sugli utenti del sito. I reparti progettazione tecnica e supporto tecnico potrebbero invece voler esaminare le transazioni e le aree in cui il processo di acquisto potrebbe essere migliorato. La maggior parte dei database relazionali a livello di azienda, quale Microsoft SQL Server, contiene un insieme di strumenti esteso per la maggior parte dei progetti di data mining.

Progettando il sito Web per eseguire ripetutamente query sul database utilizzando l'ID univoco in ogni fase dello scenario precedente, il sito gestisce lo stato. In tal modo, l'utente percepisce che il sito è in grado di identificare e rispondere singolarmente e personalmente a ciascun utente.

Vantaggi dell'utilizzo di un database per la gestione dello stato:

  • Protezione   L'accesso ai database richiede delle procedure di autenticazione e autorizzazione rigorose.

  • Capacità di archiviazione   Un database consente l'archiviazione della quantità di informazioni desiderata.

  • Persistenza dei dati   Le informazioni contenute nel database possono essere archiviate per la durata desiderata e non sono soggette alla disponibilità del server Web.

  • Affidabilità e integrità dei dati   I database offrono diverse funzionalità per la gestione dei dati, inclusi i trigger e l'integrità referenziale, le transazioni e così via. Mantenendo le informazioni sulle transazioni in un database, anziché nello stato sessione, ad esempio, è possibile ripristinare più facilmente lo stato precedente a un errore.

  • Accessibilità   I dati archiviati nel database sono accessibili a un'ampia varietà di strumenti di elaborazione delle informazioni.

  • Supporto Widespread   Sono disponibili un'ampia gamma di strumenti di database e numerose configurazioni personalizzate.

Svantaggi dell'utilizzo di un database per la gestione dello stato:

  • Complessità   L'utilizzo di un database per supportare la gestione dello stato richiede configurazioni hardware e software più complesse.

  • Considerazioni sulle prestazioni   Una costruzione non adeguata del modello di dati relazionale può generare problemi di scalabilità. Inoltre, l'utilizzo di un numero eccessivo di query sul database può avere effetti negativi sulle prestazioni del server.

Riepilogo dei metodi di gestione dello stato sul lato server

Nella tabella riportata di seguito sono elencate le opzioni di gestione dello stato del lato server disponibili in ASP.NET. Vengono inoltre forniti suggerimenti per l'utilizzo di ciascuna opzione.

Opzione di gestione dello stato

Utilizzo consigliato

Stato applicazione

Quando vengono archiviate informazioni globali, non modificate di frequente e utilizzate da molti utenti, e non esistono problemi di protezione. Si consiglia di non memorizzare grandi quantità di informazioni nello stato applicazione.

stato sessione

Quando vengono archiviati dati temporanei, specifici di una singola sessione e la protezione rappresenta un problema. Si consiglia di non memorizzare grandi quantità di informazioni nello stato sessione. Tenere presente che un oggetto stato sessione viene creato e gestito per l'intera durata di ciascuna sessione nell'applicazione. Nelle applicazioni utilizzate da molti utenti, ciò può richiedere l'utilizzo di un numero considerevole di risorse server e influire sulla scalabilità.

Proprietà profilo

Quando vengono archiviate informazioni specifiche dell'utente che devono essere rese permanenti dopo che la sessione utente è scaduta e recuperate nei successivi accessi all'applicazione.

Supporto database

Quando vengono archiviate grandi quantità di informazioni o gestite delle transazioni oppure quando le informazioni devono essere mantenute in caso di riavvio delle sessioni e delle applicazioni. Il data mining e la protezione rappresentano un problema.

Vedere anche

Concetti

Cenni preliminari sulla gestione dello stato ASP.NET

Cenni preliminari sui cookie ASP.NET

Cenni preliminari sulle proprietà dei profili ASP.NET

Cenni preliminare sullo stato della sessione ASP.NET

Cenni preliminari sullo stato delle applicazioni ASP.NET

Altre risorse

Novità sulla gestione dello stato ASP.NET