Modalità stato sessione
Aggiornamento: novembre 2007
Lo stato sessione ASP.NET supporta diverse opzioni per l'archiviazione dei dati della sessione, ognuna identificata da un valore nell'enumerazione SessionStateMode. Nell'elenco seguente vengono descritte le modalità stato sessione disponibili.
Modalità InProc: consente di archiviare in memoria lo stato sessione sul server Web. Questa è l'impostazione predefinita.
Modalità StateServer: consente di archiviare lo stato sessione in un processo separato, denominato Servizio stato di ASP.NET. Questa modalità garantisce che lo stato sessione sia mantenuto se l'applicazione Web viene riavviata e sia disponibile per più server Web in una Web farm.
La modalità SQLServer consente di archiviare lo stato sessione in un database SQL Server. Questa modalità garantisce che lo stato sessione sia mantenuto se l'applicazione Web viene riavviata e sia disponibile per più server Web in una Web farm.
Modalità Custom: consente di specificare un provider di archiviazione personalizzato.
Modalità Off: consente di disattivare lo stato sessione.
È possibile specificare la modalità che deve essere utilizzata con lo stato sessione ASP.NET assegnando uno dei valori di enumerazione SessionStateMode all'attributo mode dell'elemento sessionState nel file Web.config dell'applicazione. Per attivare modalità diverse da InProc eOff, è necessario fornire parametri aggiuntivi, ad esempio i valori delle stringhe di connessione di cui è fornita una descrizione più avanti in questo argomento. Per visualizzare lo stato sessione selezionato corrente, accedere al valore della proprietà HttpSessionState.Mode.
Modalità in-process
La modalità stato sessione predefinita è in-process e viene specificata utilizzando il valore di enumerazione InProcSessionStateMode. Tale modalità consente di archiviare le variabili e i valori dello stato sessione sul server Web locale. Si tratta dell'unica modalità in grado di supportare l'evento Session_OnEnd. Per ulteriori informazioni sull'evento Session_OnEnd, vedere Eventi correlati allo stato sessione.
Attenzione: |
---|
Quando si attiva la modalità Web garden impostando l'attributo webGarden su true nell'elemento processModel del file Web.config per l'applicazione, non utilizzare la modalità stato sessione InProc. In caso contrario, se più richieste per la stessa sessione vengono gestite da processi di lavoro diversi, può verificarsi una perdita di dati. |
Modalità server di stato
La modalità StateServer consente di archiviare lo stato sessione in un processo, denominato servizio stato ASP.NET, che è separato dal processo di lavoro ASP.NET o dal pool di applicazioni IIS. L'utilizzo di questa modalità garantisce il mantenimento dello stato sessione se l'applicazione Web viene riavviata e la disponibilità per più server Web in una Web farm.
Per utilizzare la modalità StateServer, è innanzitutto necessario accertarsi che il servizio stato di ASP.NET sia in esecuzione sul server utilizzato per archiviare la sessione. Tale servizio viene installato al momento dell'installazione di ASP.NET e di .NET Framework, utilizzando il seguente percorso:
systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe
Per configurare un'applicazione ASP.NET per l'utilizzo della modalità StateServer, effettuare le seguenti operazioni nel file Web.config dell'applicazione:
Impostare l'attributo mode dell'elemento sessionState su StateServer.
Impostare l'attributo stateConnectionString su tcpip=serverName:42424.
Nota: Per una migliore sicurezza dell'applicazione quando si utilizza la modalità StateServer, si consiglia di proteggere il valore stateConnectionString crittografando la sezione sessionState del file di configurazione. Per informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.
Nell'impostazione di configurazione per la modalità StateServer riportata nel codice di esempio seguente lo stato sessione è archiviato su un computer remoto denominato SampleStateServer:
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=SampleStateServer:42424"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>
Nota: |
---|
Quando la modalità è impostata su StateServer, gli oggetti archiviati nello stato sessione devono essere serializzabili. Per informazioni al riguardo, vedere la classe SerializableAttribute. |
Per utilizzare la modalità StateServer in una Web farm, è necessario disporre delle stesse chiavi di crittografia specificate nell'elemento machineKey della configurazione Web per tutte le applicazioni che fanno parte della Web farm. Per informazioni su come creare chiavi del computer, vedere l'articolo 313091 "How to create keys by using Visual Basic .NET for use in Forms authentication" disponibile nella Microsoft Knowledge Base all'indirizzo https://support.microsoft.com (informazioni in lingua inglese).
Modalità SQL Server
La modalità SQLServer consente di archiviare lo stato sessione in un database SQL Server. L'utilizzo di questa modalità garantisce il mantenimento dello stato sessione se l'applicazione Web viene riavviata e la disponibilità per più server Web in una Web farm.
Nota: |
---|
Quando è attivata la modalità SQL Server, gli oggetti archiviati nello stato sessione devono essere serializzabili. Per informazioni al riguardo, vedere la classe SerializableAttribute. |
Per utilizzare la modalità SQLServer, è innanzitutto necessario accertarsi che il database dello stato sessione ASP.NET sia installato su SQL Server. È possibile installare tale database utilizzando lo strumento Aspnet_regsql.exe, come descritto più avanti in questo argomento.
Per configurare un'applicazione ASP.NET per l'utilizzo della modalità SQLServer, effettuare le seguenti operazioni nel file Web.config dell'applicazione:
Impostare l'attributo mode dell'elemento sessionState su SQLServer.
Impostare l'attributo sqlConnectionString su una stringa di connessione per il database SQL Server.
Nota: Per una migliore sicurezza dell'applicazione quando si utilizza la modalità SQLServer, si consiglia di proteggere il valore sqlConnectionString crittografando la sezione sessionState del file di configurazione. Per informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.
Nell'impostazione di configurazione per la modalità SQLServer riportata nel codice di esempio seguente lo stato sessione è archiviato su un database SQL Server denominato "SampleSqlServer":
<configuration>
<system.web>
<sessionState mode="SQLServer"
sqlConnectionString="Integrated Security=SSPI;data
source=SampleSqlServer;" />
</system.web>
</configuration>
Nota: |
---|
Se nel file di configurazione si specifica una connessione trusted a SQL Server utilizzando l'attributo sqlConnectionString dell'elemento sessionState, SessionStateModule si connetterà a SQL Server utilizzandone la sicurezza integrata. La connessione verrà effettuata utilizzando l'identità del processo ASP.NET o le eventuali credenziali utente fornite per l'elemento di configurazione identity. In alternativa, è possibile specificare l'utilizzo di un'identità rappresentata da IIS avvalendosi dell'opzione <identity impersonate="true" /> e impostando l'attributo useHostingIdentity dell'elemento di configurazione sessionState su false. Per ulteriori informazioni sull'identità del processo ASP.NET, vedere Configurazione dell'identità dei processi ASP.NET e Rappresentazione ASP.NET. |
Per configurare la modalità SQLServer per una Web farm, nel file di configurazione relativo a ciascun server Web impostare l'attributo sqlConnectionString dell'elemento sessionState in modo che punti allo stesso database SQL Server. Il percorso dell'applicazione ASP.NET specificato nella metabase IIS deve essere identico su tutti i server Web che condividono lo stato sessione nel database SQL Server. Per informazioni sui passaggi necessari per risolvere il problema quando i percorsi dell'applicazione sono diversi tra un server e l'altro, vedere l'articolo 325056 "PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode" disponibile nella Microsoft Knowledge Base all'indirizzo https://support.microsoft.com (informazioni in lingua inglese).
Installazione del database di stato sessione utilizzando lo strumento Aspnet_regsql.exe
Per installare il database dello stato sessione su SQL Server, eseguire lo strumento Aspnet_regsql.exe disponibile nella cartella systemroot\Microsoft.NET\Framework\versionNumber sul server Web. Fornire le seguenti informazioni con il comando:
Il nomedell'istanza SQL Server specificando l'opzione -S.
Le credenziali di accesso relative a un account che disponga dell'autorizzazione per la creazione di un database su SQL Server. Immettere l'opzione -E per utilizzare l'utente correntemente connesso oppure l'opzione -U per specificare un ID utente insieme all'opzione -P per specificare una password.
L'opzione della riga di comando -ssadd per aggiungere il database dello stato sessione.
Per impostazione predefinita, non è possibile utilizzare lo strumento Aspnet_regsql.exe per installare il database dello stato sessione su SQL Server Express Edition. Per eseguire lo strumento Aspnet_regsql.exe e installare un database SQL Server Express Edition, è innanzitutto necessario abilitare l'opzione Agent XPs di SQL Server utilizzando i comandi T-SQL come riportato di seguito:
EXECUTE sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXECUTE sp_configure 'Agent XPs', 1 RECONFIGURE WITH OVERRIDE GO EXECUTE sp_configure 'show advanced options', 0 RECONFIGURE WITH OVERRIDE GO
Tali comandi T-SQL devono essere eseguiti per ogni istanza di SQL Server Express Edition in cui l'opzione Agent XPs risulti disabilitata.
Per impostazione predefinita, lo strumento Aspnet_regsql.exe creerà un database denominato ASPState contenente stored procedure che supportano la modalità SQLServer. Sempre per impostazione predefinita, i dati della sessione vengono archiviati nel database tempdb. Per modificare il percorso di archiviazione dei dati della sessione, è possibile utilizzare l'opzione -sstype. Nella tabella che segue sono indicati i possibili valori dell'opzione -sstype:
Opzione |
Descrizione |
---|---|
t |
Archivia i dati della sessione nel database tempdb di SQL Server. Questa è l'impostazione predefinita. Se SQL Server viene riavviato, i dati della sessione archiviati in un database tempd verranno persi. |
p |
Archivia i dati della sessione nel database ASPState anziché nel database tempdb. |
c |
Archivia i dati della sessione in un database personalizzato. Se si specifica l'opzione c, è anche necessario includere il nome del database personalizzato utilizzando l'opzione -d. |
Il comando seguente crea, ad esempio, un database denominato ASPState su un'istanza SQL Server denominata "SampleSqlServer" e specifica che i dati della sessione vengano archiviati anche nel database ASPState:
aspnet_regsql.exe -S SampleSqlServer -E -ssadd -sstype p
Nota: |
---|
Se si sta eseguendo ASP.NET 1.0 o ASP.NET 1.1, non è possibile utilizzare lo strumento Aspnet_regsql.exe per configurare ASP.NET per l'archiviazione dello stato della sessione in un database SQL Server persistente. È tuttavia possibile ottenere gli script per archiviare lo stato della sessione in un database persistente. Per informazioni dettagliate, vedere l'articolo 311209 "HOW TO: Configure ASP.NET for Persistent SQL Server Session State Management" disponibile nella Microsoft Knowledge Base all'indirizzo https://support.microsoft.com (informazioni in lingua inglese). In alternativa, i server Web che eseguono ASP.NET 1.0 o ASP.NET 1.1 possono dirigere lo stato della sessione persistente in un database SQL Server in cui sia installato lo schema dello stato della sessione di ASP.NET 2.0. |
Nella modalità SQLServer è possibile configurare diversi computer eseguendo SQL Server in modo che funzioni come cluster di failover, ovvero due o più computer identici che eseguono SQL Server e archiviano i dati per un singolo database. Quando si verifica un errore su un computer in cui è installato SQL Server, il computer viene sostituito da un altro server che gestirà le richieste senza alcuna perdita dei dati della sessione. Per configurare la modalità SQL Server per un cluster di failover, è necessario specificare -sstype p durante l'esecuzione dello strumento Aspnet_regsql.exe in modo che i dati dello stato sessione vengano archiviati nel database ASPState e non nel database tempdb. In un cluster di Server SQL non è supportata l'archiviazione dello stato sessione nel database tempdb. Per ulteriori informazioni sull'impostazione della modalità SQL Server per un cluster di failover, vedere l'articolo 323262 "How to use ASP.NET session state SQL Server Mode in a failover cluster" disponibile nella Microsoft Knowledge Base all'indirizzo https://support.microsoft.com (informazioni in lingua inglese).
Modalità personalizzata
La modalità Custom consente di specificare che si desidera archiviare i dati dello stato sessione utilizzando un provider dell'archivio dello stato sessione personalizzato. Quando si configura l'applicazione ASP.NET con una Mode impostata su Custom, è necessario specificare il tipo di provider dell'archivio dello stato sessione utilizzando il sottoelemento providers dell'elemento sessionState della configurazione. Il tipo di provider viene specificato utilizzando un sottoelemento add e includendo un attributo type che specifica il nome del tipo di provider e un attributo name che specifica il nome dell'istanza del provider. Il nome dell'istanza del provider verrà successivamente fornito all'attributo customProvider dell'elemento sessionState per configurare lo stato sessione ASP.NET in modo da utilizzare tale istanza per l'archiviazione e il recupero dei dati della sessione.
Nell'esempio riportato di seguito vengono illustrati elementi di un file Web.config che specificano che lo stato sessione ASP.NET utilizza un provider dell'archivio dello stato sessione personalizzato.
<configuration>
<connectionStrings>
<add name="OdbcSessionServices"
connectionString="DSN=SessionState;" />
</connectionStrings>
<system.web>
<sessionState
mode="Custom"
customProvider="OdbcSessionProvider">
<providers>
<add name="OdbcSessionProvider"
type="Samples.AspNet.Session.OdbcSessionStateStore"
connectionStringName="OdbcSessionServices"
writeExceptionsToEventLog="false" />
</providers>
</sessionState>
</system.web>
</configuration>
Per ulteriori informazioni sui provider dell'archivio dello stato sessione personalizzati, vedere Implementazione di un provider dell'archivio dello stato sessione.
Nota: |
---|
Per accedere alle risorse sicure, ad esempio SQL Server, un provider dell'archivio dello stato sessione personalizzato utilizzerà l'identità del processo ASP.NET o le eventuali credenziali utente fornite all'elemento identity della configurazione. In alternativa, è possibile specificare l'utilizzo di un'identità rappresentata da IIS avvalendosi dell'opzione <identity impersonate="true" /> e impostando l'attributo useHostingIdentity dell'elemento di configurazione sessionState su false. Per ulteriori informazioni sull'identità del processo ASP.NET, vedere Configurazione dell'identità dei processi ASP.NET e Rappresentazione ASP.NET. |
Vedere anche
Concetti
Cenni preliminare sullo stato della sessione ASP.NET
Cenni preliminari sulla gestione dello stato ASP.NET
Riferimenti
Elemento providers per sessionState (schema delle impostazioni ASP.NET)