Come lavorare con le sessioni in ASP.Net

HTTP è un protocollo senza stato. Ciò implica che ogni volta che viene inviata una nuova richiesta dal client al server, le informazioni sullo stato della richiesta precedente vengono perse. Esistono diversi modi per archiviare e gestire lo stato in ASP.Net. L'oggetto Session è uno di questi, gli altri sono gli oggetti Caching e Application.

La memorizzazione nella cache migliora le prestazioni dell'applicazione riducendo al minimo il consumo di risorse nel sistema. È possibile archiviare i dati o le pagine Web utilizzati di frequente per migliorare le prestazioni, la velocità effettiva e la scalabilità dell'applicazione riducendo il consumo delle risorse del server.

È possibile definire la sessione come una sessione di connettività tra il server e il client: l'oggetto sessione contiene i dati che corrispondono alla sessione di un utente. La sessione è una tecnica di gestione dello stato lato server utilizzata per archiviare informazioni specifiche dell'utente nella memoria per il successivo recupero.

Modalità di archiviazione dei dati di sessione

L'oggetto sessione viene creato e gestito sul lato server. La modalità di archiviazione della sessione determina dove devono essere archiviati i dati della sessione. Lo stato della sessione può essere memorizzato in una delle seguenti modalità:

  1. In-Process: memorizzato nello stesso processo ASP.Net
  2. State Server: memorizzato in qualche altro sistema
  3. SQL Server: archiviato nel database SQLServer
  4. Personalizzato: consente di memorizzare i dati della sessione utilizzando un provider di archiviazione personalizzato

La modalità In-Proc di archiviazione dei dati di sessione è la modalità predefinita ed è anche la più veloce di tutte le modalità di archiviazione disponibili. In questa modalità, i dati della sessione vengono archiviati nella memoria del server, all'interno del processo di lavoro ASP.Net. È necessario utilizzare questa modalità se la quantità di dati che devono essere archiviati nella sessione è inferiore e se non è necessario che i dati siano persistenti. Va notato che i dati della sessione memorizzati in questa modalità sono volatili, ovvero, non appena la sessione viene terminata, i dati della sessione vengono persi. Quindi, i dati nella sessione sono disponibili finché la sessione è attiva.

Nella modalità State Server, i dati della sessione vengono memorizzati in un processo separato, chiamato ASP.Net State Service. In altre parole, i dati della sessione in questa modalità vengono archiviati all'esterno del processo di lavoro ASP.Net o del pool di applicazioni in IIS. A differenza della modalità In-Proc, i dati della sessione in modalità State Server vengono conservati, ovvero non vengono persi dopo il riavvio dell'applicazione Web.

Il frammento di codice seguente illustra come configurare lo stato della sessione nell'applicazione da archiviare in questa modalità.

 

   

      stateConnectionString="tcpip=Server:1234"

      cookieless="false"

      timeout="20"/>

 

The SQLServer mode of session data storage is used to persist session data of your application in the SQLServer database. Similar to the State Server mode of session data storage, the SQLServer mode also enables you to persist session data of your application across application restarts. Note that you should ensure that the ASP.Net session state database is created before using this mode. You can create this database using the Aspnet_regsql.exe command line utility.

The following code snippet shows how you can configure your application to store session data in a SQLServer database.

 

   

       sqlConnectionString="data source=server;user id=joydip;[email protected]"

       cookieless="false" timeout="20" />

 

Support for Session data compression

Microsoft's ASP.Net 4 introduced a new feature: session state compression. With ASP.Net 4 and onward, you can leverage this built-in feature to compress session data for storing out-of-process sessions. To take advantage of this feature, all you need to do is set the compressionEnabled attribute to "true" in the configuration file of your application. The following code snippet illustrates how this can be configured.

  mode="SQLServer"

  stateConnectionString="some connection string..."

  compressionEnabled="true"/>

Session state enables you to store user specific data in the memory and identify a particular request uniquely.  Session data is stored as key/value pairs in the SessionStateItemCollection and can be accessed using the HttpContext.Session property.

The following code examples show how you can store and retrieve session data.

HttpSessionState.Session["UserName"] = "John"; //stores session data

string str = HttpSessionState.Session["UserName"].ToString();

// Retrieves session data

HttpSessionState.Remove("Key to remove");

//Removes an object from the session state