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:

sessionStateCookie

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>


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow