Condividi tramite


Passaggio di pianificazione 2: Pianificare le impostazioni di ASP.NET

di Keith Newman e Robert McMurray

2.1. Impostazioni dello stato della sessione

Quando i client visitano un sito, si spostano in genere da una pagina all'altra e modificano di frequente alcune delle pagine visitate. Se si vuole tenere traccia delle pagine che gli utenti esplorano e delle modifiche che apportano durante la visita al sito Web, è possibile configurare lo stato della sessione.

Quando lo stato della sessione è abilitato per l'applicazione, un utente riceve un ID di sessione univoco in occasione della prima richiesta a una pagina Web dall'applicazione ASP.NET. I dati dello stato della sessione vengono archiviati nel server in uno dei modi seguenti:

  • In-process: lo stato della sessione viene archiviato nel processo di lavoro in cui viene eseguita l'applicazione ASP.NET.
  • Server di stato: lo stato della sessione viene archiviato all'esterno del processo di lavoro in cui viene eseguita l'applicazione ASP.NET.
  • SQL Server: lo stato della sessione viene archiviato in un database SQL Server.

Nota

È inoltre possibile configurare un'archiviazione personalizzata fuori stato per i dati di stato della sessione, tuttavia questa attività non rientra nell'ambito di questa esercitazione. I progetti Visual Studio 11 usano l'archiviazione personalizzata per supportare SQL Server, SQL Compact e SQL Azure.

I dati di stato della sessione possono essere inoltre archiviati nel client all'interno di un cookie. Un cookie è un file di testo che contiene i dati usati per archiviare le informazioni relative a un utente, ad esempio le preferenze e le informazioni di autenticazione.

Le sezioni seguenti illustrano in maggiore dettaglio le opzioni di archiviazione dello stato della sessione.

Archiviare lo stato della sessione in-process

La modalità di stato della sessione in-process consente di archiviare i dati sullo stato della sessione per un'applicazione ASP.NET nel processo di lavoro in cui viene eseguita l'applicazione. Questa modalità è l'impostazione predefinita per IIS 8.

Il vantaggio dell'utilizzo dello stato della sessione in-process è il più rapido accesso ai dati sullo stato della sessione. Man mano che si archiviano più dati in una sessione, tuttavia, viene usata una maggiore quantità di memoria, con un potenziale peggioramento delle prestazioni del server.

Prima di configurare lo stato della sessione in-process, considerare l'effetto del riciclo del processo di lavoro sui dati di stato della sessione. Se il processo di lavoro viene riciclato, tutti i dati di stato della sessione vengono persi. Se nelle applicazioni ASP.NET è necessario conservare i dati di stato della sessione e se la velocità di accesso ai dati non costituisce l'obiettivo principale, per archiviare questi dati usare una modalità di stato della sessione out-of-process.

Importante

Per rendere effettivo lo stato della sessione in-process, è necessario che il servizio stato di Windows (Aspnet_state.exe) sia in esecuzione. Per impostazione predefinita, questo servizio viene installato quando Windows Server® 2012 è installato e viene configurato per l'avvio manuale. È consigliabile impostare la modalità di avvio automatico.

Per impostazione predefinita, la sessione scade se l'utente non richiede né aggiorna una pagina nell'applicazione ASP.NET per 20 minuti. Poiché gli oggetti sessione utilizzano la memoria nel server Web, è consigliabile ridurre il valore di timeout per risparmiare risorse.

Importante: prestare attenzione quando si modifica il valore di timeout della sessione, perché le informazioni archiviate nell'oggetto Session di un utente vengono perse quando l'utente non è attivo nel sito Web per la durata del periodo di timeout.

Se si decide di usare l'archiviazione dello stato della sessione in-process, decidere anche se si desidera usare i cookie. Per altre informazioni sui cookie, vedere Modalità cookie per lo stato della sessione.

Archiviare lo stato della sessione mediante un server di stato

Un server di stato mantiene in memoria la data dello stato della sessione al di fuori del processo di lavoro. Il vantaggio di questa configurazione è che lo stato della sessione viene mantenuto quando il processo di lavoro dell'applicazione viene riciclato. L'uso di un server di stato è consigliato per le applicazioni di medie dimensioni.

Un server di stato dipende dal servizio stato di Windows (Aspnet_state.exe) e richiede una chiave del computer per verificare lo stato della sessione attraverso la connessione.

Quando un server di stato è in esecuzione nello stesso server Web che contiene le applicazioni di cui gestisce lo stato, è supportata la configurazione di un Web garden. Per una maggiore protezione dei dati di stato della sessione, usare la configurazione di una Web farm con un server distinto per l'archiviazione dello stato della sessione e la condivisione di tali informazioni tra tutti i server nella farm. Un altro approccio consiste nell'usare SQL Server per gestire lo stato della sessione out-of-process.

Importante: il servizio stato di Windows (Aspnet_state.exe) deve essere in esecuzione per lo stato della sessione in-process da rendere effettivo. Per impostazione predefinita, questo servizio viene installato quando Windows Server 2012 è installato e viene configurato per l'avvio manuale. Modificare il comportamento di avvio su Automatico.

Se si decide di archiviare lo stato della sessione tramite un server di stato, è necessario prendere le seguenti decisioni di progettazione:

  • Definire una stringa di connessione per il server di stato.
  • Specificare il numero di secondi di attesa prima del timeout della connessione.
  • Decidere se abilitare la compressione.
  • Decidere se archiviare tutti i dati dello stato della sessione in un cookie. Per altre informazioni sui cookie, vedere Modalità cookie per lo stato della sessione.

Archiviare lo stato della sessione mediante SQL Server

Un tipo di stato della sessione out-of-process usa un server SQL per archiviare i dati di stato della sessione. Il vantaggio di questa configurazione è il mantenimento dello stato della sessione anche se il processo di lavoro dell'applicazione viene riciclato o se il servizio stato di Windows o il server Web viene arrestato.

Nota

Questa impostazione non supporta SQL Azure.

Quando un server SQL è in esecuzione nello stesso server Web che contiene le applicazioni di cui gestisce lo stato, è supportata la configurazione di un Web garden, che consente di aumentare la scalabilità del server Web. Quando il server SQL è in esecuzione in un altro server, è supportata la configurazione di una Web farm, che consente di aumentare notevolmente la scalabilità di un gruppo di server.

Importante

Per rendere effettivo lo stato della sessione out-of-process, è necessario che il servizio stato di Windows (Aspnet_state.exe) sia in esecuzione. Per impostazione predefinita, questo servizio viene installato quando Windows Server 2012 è installato e viene configurato per l'avvio manuale. Modificare il comportamento di avvio su Automatico.

Importante

Prima di configurare un server SQL per lo stato della sessione, è necessario eseguire lo script InstallSqlState.sql nel server. Per impostazione predefinita, questo script viene archiviato in %systemroot%\Microsoft.NET\Framework\V4.0.30319.

Se si decide di archiviare lo stato della sessione in un database di SQL Server, è necessario prendere le seguenti decisioni di progettazione:

  • Definire una stringa di connessione per il database.
  • Specificare il numero di secondi di attesa prima del timeout della connessione.
  • Specificare il numero di secondi di attesa prima del tentativo di riconnessione.
  • Decidere se abilitare un database personalizzato.
  • Decidere se abilitare la compressione.
  • Decidere se archiviare tutti i dati dello stato della sessione in un cookie. Per altre informazioni sui cookie, vedere Modalità cookie per lo stato della sessione.

Un metodo per tenere traccia dello stato della sessione per i client che si connettono a un server Web consiste nell'uso dei cookie. È possibile configurare un server Web per usare i cookie, per non usarli o per selezionare il comportamento dei cookie che dipende dal browser usato per la connessione.

I cookie di sessione associano le informazioni di una sessione a quelle del client per quella sessione. Una sessione è la durata della connessione di un utente a un sito. I cookie vengono passati in un'intestazione HTTP insieme a tutte le richieste inviate tra un client e un server Web.

L'uso dei cookie per tenere traccia dello stato della sessione è più efficiente di qualsiasi altro metodo che non usa cookie, perché i cookie non richiedono alcun reindirizzamento. I cookie consentono inoltre agli utenti di inserire segnalibri nelle pagine Web e di mantenere lo stato se si abbandona un sito per visitarne un altro e quindi si torna al sito originale. Uno svantaggio dell'uso dei cookie dell'utente è che gli utenti possono disabilitare i cookie nei propri browser.

La modalità Usa cookie profilo dispositivo causa l'uso dei cookie del browser se il browser supporta i cookie; in caso contrario, non vengono usati cookie. Se il profilo del dispositivo indica il supporto dei cookie, questi vengono usati anche se l'utente ne ha disabilitato il supporto.

Importante

Se si usa la modalità cookie Utilizza profilo del dispositivo, impostare la rigenerazione degli ID sessione scaduti. In questo modo, in un server Web i token possono scadere ed essere rigenerati, riducendo il tempo a disposizione per attacchi potenziali mirati ad acquisire un cookie e a ottenere l'accesso al contenuto del server Web.

Con la modalità Rilevamento automatico i cookie vengono usati se il profilo del dispositivo mobile li supporta, altrimenti non vengono usati. Nei browser desktop di cui è noto il supporto dei cookie, ASP.NET tenta di usarli quando tale supporto è abilitato. Se il supporto dei cookie è disabilitato, lo stato della sessione viene archiviato nell'URL.

Importante

Se si usa la modalità cookie di rilevamento automatico, impostare la rigenerazione degli ID sessione scaduti. In questo modo, in un server Web i token possono scadere ed essere rigenerati, riducendo il tempo a disposizione per attacchi potenziali mirati ad acquisire un cookie e a ottenere l'accesso al contenuto del server Web. È consigliabile inoltre impostare il timeout su un valore minore di quello predefinito di 20 minuti.

È possibile configurare lo stato della sessione senza usare i cookie. Quando si usa un URI (Uniform Resource Identifier) per gestire lo stato della sessione, l'ID di sessione viene incorporato come stringa di query nella richiesta URI, quindi l'URI viene reindirizzato all'URL richiesto originariamente. La richiesta URI modificata viene usata per la durata della sessione, pertanto i cookie non sono necessari.

Importante

Quando si usa un URI, impostare la rigenerazione degli ID sessione scaduti. In questo modo, in un server Web i token possono scadere ed essere rigenerati, riducendo il tempo a disposizione per attacchi potenziali mirati ad acquisire un cookie e a ottenere l'accesso al contenuto del server Web.

L'uso di un URI per tenere traccia dello stato della sessione può aiutare a evitare gli svantaggi correlati ai cookie, inclusi i problemi di supporto dei browser e la possibilità che gli utenti disabilitino i cookie. L'uso di un URI presenta tuttavia gli svantaggi seguenti:

  • Se si usano URL assoluti si perdono le informazioni sullo stato della sessione. Questo significa che se un utente passa a un'altra applicazione e quindi torna a quella precedente, l'input dell'utente non sarà più presente nella pagina.
  • Gli utenti non possono inserire segnalibri nelle pagine Web, in quanto lo stato della sessione viene perso.

Se si decide di usare i cookie per archiviare lo stato della sessione, è necessario prendere le seguenti decisioni di progettazione:

  • Selezionare una modalità cookie tra le seguenti: Rilevamento automatico, Utilizza cookie, Utilizza profilo del dispositivo o Utilizza URI.
  • A meno che non si sia selezionato Utilizza URI, specificare il nome del cookie.
  • A meno che non si sia selezionato Utilizza URI, specificare il numero di minuti che deve trascorrere prima che si verifichi il timeout del cookie.
  • A meno che non si sia selezionato Utilizza cookie, decidere se rigenerare l'ID di una sessione scaduta.

2.2. Impostazioni di pagine e controlli

Le pagine Web ASP.NET includono elementi aggiuntivi che ASP.NET riconosce ed elabora quando la pagina è in esecuzione. Le pagine ASP.NET possono inoltre contenere controlli personalizzati riutilizzabili, che vengono elaborati nel server. In questo modo è possibile usare il codice del server per impostare le proprietà delle pagine Web ASP.NET.

Nota

Queste impostazioni si applicano solo ad ASP.NET Web Forms. Non si applicano alle pagine Web ASP.NET o ASP.NET MVC.

IIS 8 consente di configurare le impostazioni seguenti ASP.NET pagina e controlli utente:

  • Impostazioni di comportamento: ad esempio, se la pagina Web mantiene lo stato di visualizzazione e lo stato di visualizzazione di qualsiasi controllo server che contiene al termine della richiesta di pagina corrente.
  • Impostazioni generali: ad esempio spazi dei nomi inclusi per tutte le pagine.
  • Impostazioni di compilazione: ad esempio, se le pagine vengono compilate o interpretate.
  • Servizi: ad esempio, se lo stato della sessione è abilitato.

IIS 8 fornisce le impostazioni predefinite per ASP.NET pagine e controlli, ma è possibile modificare tali impostazioni in base alle esigenze. Ad esempio, è possibile impostare il file della pagina master per un sito o abilitare lo stato di visualizzazione.

I controlli Web personalizzati sono componenti compilati in esecuzione nel server che incapsulano funzionalità dell'interfaccia utente e altre funzionalità correlate in pacchetti riutilizzabili. In IIS 8 è possibile specificare il prefisso del tag e il mapping dello spazio dei nomi per un controllo personalizzato che può essere usato in più pagine di un'applicazione.

Aggiungere un controllo personalizzato quando si vuole specificare il mapping tra prefisso di tag e spazio dei nomi per un controllo personalizzato che viene usato in più pagine di un'applicazione.

Nota

Se si aggiunge un'impostazione di configurazione, questa viene aggiunta a livello locale e a qualsiasi livello figlio che la eredita.

Se si decide di configurare i controlli personalizzati di ASP.NET, sono necessarie le informazioni seguenti per ogni controllo da configurare:

  • Specificare il prefisso tag del controllo.
  • Specificare lo spazio dei nomi .NET del controllo.
  • Specificare l'assembly in cui si trova il controllo.

2.3. Impostazioni dell'applicazione

Configurare le impostazioni dell'applicazione se si desidera archiviare coppie chiave/valore come parte della configurazione nel file Web.config. Le impostazioni dell'applicazione consentono di accedere in modo semplice e rapido ai dati di configurazione archiviati per l'applicazione.

Per gestire i controlli personalizzati, è possibile visualizzare un elenco che contiene tutti i controlli personalizzati per un livello di configurazione specifico. È possibile ordinare questo elenco in base al prefisso di tag, all'origine o all'assembly, nonché all'ambito (locale o ereditato). È inoltre possibile raggruppare i controlli in base all'ambito per verificare quali controlli personalizzati si applicano al livello di configurazione corrente e quali sono ereditati da un livello padre.

Aggiungere un controllo personalizzato quando si vuole specificare il mapping tra prefisso di tag e spazio dei nomi per un controllo personalizzato che viene usato in più pagine di un'applicazione.

Nota

Se si aggiunge un'impostazione di configurazione, questa viene aggiunta a livello locale e a qualsiasi livello figlio che la eredita.

Se si decide di configurare le impostazioni dell'applicazione, sono necessarie le informazioni seguenti per ogni impostazione da configurare:

  1. Specificare un nome per l'impostazione.
  2. Specificare un valore per l'impostazione.

2.4. Impostazioni di compilazione di .NET

Per poter gestire le richieste degli utenti, il codice dell'applicazione deve prima essere compilato da ASP.NET in uno o più assembly. Gli assembly sono file con estensione dll. Configurare le impostazioni di compilazione .NET in IIS 8 quando si vuole controllare la modalità di compilazione del codice ASP.NET.

IIS consente di configurare le impostazioni di compilazione .NET seguenti:

  • Impostazioni batch, ad esempio la dimensione massima dei file che è possibile includere in un batch e il numero massimo di pagine per ogni compilazione in batch.
  • Impostazioni relative al comportamento, ad esempio il numero di volte per cui le risorse vengono compilate prima del riavvio dell'applicazione.
  • Impostazioni generali, ad esempio il linguaggio di programmazione predefinito usato in file di compilazione dinamica.

2.5. Impostazioni di globalizzazione di .NET

Per globalizzazione si intende il processo di internazionalizzazione del codice dell'applicazione con successiva localizzazione dell'applicazione in altre lingue e impostazioni cultura. Il processo di internazionalizzazione consente la traduzione, l'archiviazione, il recupero e la presentazione di contenuto dell'applicazione per tutte le impostazioni locali usando la stessa codebase dell'applicazione, dove possibile. Per impostazioni locali si intende la combinazione di lingua e ambiente culturale, inclusi i formati di data, ora, valuta, numeri di telefono e così via. La localizzazione indica l'adattamento di un'applicazione ad altre impostazioni locali mediante la traduzione e la formattazione del contenuto in base alle impostazioni cultura, preferibilmente senza alcuna modifica al codice stesso.

È possibile modificare le impostazioni di globalizzazione per le applicazioni ASP.NET a livello di server Web quando si desidera applicarle a tutte le applicazioni ASP.NET nel server. È inoltre possibile modificare le impostazioni di globalizzazione di ASP.NET per siti, applicazioni, directory e file.

IIS consente di configurare le impostazioni di globalizzazione .NET seguenti:

  • Impostazioni cultura, ad esempio la lingua dell'interfaccia utente.
  • Impostazioni di codifica, ad esempio per le intestazioni delle risposte.

Nota

Se si modifica un'impostazione di configurazione, questa viene modificata a livello locale e per qualsiasi livello figlio che la eredita.