ASP.NET
Stato della sessione
Ricerca…
Sintassi
- Session ["Session_Key"] = Obj_Value;
Osservazioni
HTTP è senza stato. Lo stato della sessione ASP.NET è un framework che facilita il mantenimento dello stato tra richieste di pagine HTTP.
La sessione differisce dalle variabili di livello di classe nella sua capacità di rimanere disponibile su post-back e pagine diverse. Ad esempio, una variabile di sessione creata in Page1.aspx sarà disponibile se l'utente viene reindirizzato a Page2.aspx in seguito, all'interno della stessa applicazione.
Inoltre, a differenza delle variabili statiche dichiarate a livello di pagina, le variabili di sessione sono indipendenti per i diversi utenti. Il significato, la modifica del valore della variabile di sessione di un utente non influirà sul valore della stessa variabile per gli altri utenti.
Mentre ViewState
può essere utilizzato per memorizzare temporaneamente i dati dell'utente, non consente il salvataggio dei dati su più pagine. Inoltre, il viewstate
fa parte della pagina e viene inviato al client. Di conseguenza, qualsiasi informazione critica relativa all'utente non può essere salvata nel ViewState
, ed è qui che le variabili Session diventano utili.
Utilizzo dell'oggetto Session per memorizzare valori
L'oggetto System.Web.SessionState.HttpSessionState
fornisce un modo per mantenere i valori tra le richieste HTTP. Nell'esempio seguente, la preferenza dell'utente per gli avvertimenti viene salvata nella sessione. Successivamente, mentre serve un'altra richiesta all'utente, l'applicazione può leggere questa preferenza dalla sessione e nascondere gli avvisi.
public partial class Default : System.Web.UI.Page
{
public void LoadPreferences(object sender, EventArgs args)
{
// ...
// ... A DB operation that loads the user's preferences.
// ...
// Store a value with the key showWarnings
HttpContext.Current.Session["showWarnings"] = false;
}
public void button2Clicked(object sender, EventArgs args)
{
// While processing another request, access this value.
bool showWarnings = (bool)HttpContext.Current.Session["showWarnings"];
lblWarnings.Visible = false;
}
}
Nota che le variabili di sessione non sono comuni a tutti gli utenti (proprio come i cookie), e sono persistenti su più post-back.
La sessione funziona impostando un cookie che contiene un identificatore per la sessione degli utenti. Per impostazione predefinita, questo identificatore è memorizzato nella memoria del server Web, insieme ai valori memorizzati.
Ecco uno screenshot del set di cookie nel browser dell'utente per tenere traccia della sessione:
Utilizzo di un archivio sessioni SQL
Se si rileva la presenza di più server che devono condividere lo stato della sessione, l'archiviazione nella memoria del processo ASP.NET non funzionerà. Ad esempio, è possibile eseguire la distribuzione in un ambiente Web-farm con un servizio di bilanciamento del carico che distribuisce le richieste in modalità round robin. In questo ambiente, le richieste di un singolo utente possono essere fornite da più server.
Nel file web.config è possibile configurare un archivio di sessione del server SQL.
<configuration>
<system.web>
<sessionState
mode="SQLServer"
sqlConnectionString="Data Source=localhost;Integrated Security=SSPI"
cookieless="true"
timeout="30" />
</system.web>
</configuration>
Per creare lo schema sql, utilizzare lo strumento aspnet_regsql. [SampleSqlServerName] è il nome host del server SQL. -ssadd dice allo strumento di creare il database dello stato della sessione. -sstype p indica allo strumento di creare un nuovo database con il nome predefinito ASPState.
aspnet_regsql.exe -S [SampleSqlServerName] -U [Username] -P [Password] -ssadd -sstype p
Utilizzando un Amazon Session Store DynamoDB
Se non si desidera utilizzare il server SQL, è possibile utilizzare il database nosql Dynamo DB ospitato da Amazon come archivio sessioni.
Avrai bisogno dell'SDK AWS. Per installare questo dalla console del gestore pacchetti nuget di Visual Studio, utilizzare il seguente comando
Install-Package AWSSDK
È quindi possibile configurare il provider sessionState per utilizzare un provider personalizzato. È necessario specificare la regione e le credenziali, un profilo o una combinazione di accesso IAM e chiave segreta. Per impostazione predefinita, verrà creata una tabella denominata ASP.NET_SessionState.
<configuration>
<system.web>
<sessionState
timeout="20"
mode="Custom"
customProvider="DynamoDBSessionStoreProvider">
<providers>
<add name="DynamoDBSessionStoreProvider"
type="Amazon.SessionProvider.DynamoDBSessionStateStore"
AWSProfileName="[PROFILE]"
Region="[REGION]"
CreateIfNotExist="true"
/>
</providers>
</sessionState>
</system.web>
</configuration>