HttpSessionState Classe

Definizione

Fornisce accesso ai valori relativi allo stato sessione, oltre che alle impostazioni a livello di sessione e ai metodi di gestione della durata.

public ref class HttpSessionState sealed : System::Collections::ICollection
public sealed class HttpSessionState : System.Collections.ICollection
type HttpSessionState = class
    interface ICollection
    interface IEnumerable
Public NotInheritable Class HttpSessionState
Implements ICollection
Ereditarietà
HttpSessionState
Implementazioni

Esempio

Nell'esempio di codice seguente vengono impostati e recuperati i valori dallo stato della sessione.

Importante

L'esempio include una casella di testo che accetta l'input dell'utente e rappresenta quindi una potenziale minaccia alla sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per altre informazioni, vedere Cenni preliminari sugli attacchi tramite script.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
  public void Page_Load(object sender, EventArgs args)
  {
    if (!IsPostBack)
    {
      if (Session["address"] == null)
      {
        enterUserInfoPanel.Visible = true;
        userInfoPanel.Visible = false;
      }
      else
      {
        enterUserInfoPanel.Visible = false;
        userInfoPanel.Visible = true;

        SetLabels();
      }
    }
  }

  protected void SetLabels()
  {
    firstNameLabel.Text = Session["firstName"].ToString();
    lastNameLabel.Text = Session["lastName"].ToString();
    addressLabel.Text = Session["address"].ToString();
    cityLabel.Text = Session["city"].ToString();
    stateOrProvinceLabel.Text = Session["stateOrProvince"].ToString();
    zipCodeLabel.Text = Session["zipCode"].ToString();
    countryLabel.Text = Session["country"].ToString();
  }

  protected void EnterInfoButton_OnClick(object sender, EventArgs e)
  {
    Session["firstName"] = Server.HtmlEncode(firstNameTextBox.Text);
    Session["lastName"] = Server.HtmlEncode(lastNameTextBox.Text);
    Session["address"] = Server.HtmlEncode(addressTextBox.Text);
    Session["city"] = Server.HtmlEncode(cityTextBox.Text);
    Session["stateOrProvince"] = Server.HtmlEncode(stateOrProvinceTextBox.Text);
    Session["zipCode"] = Server.HtmlEncode(zipCodeTextBox.Text);
    Session["country"] = Server.HtmlEncode(countryTextBox.Text);

    enterUserInfoPanel.Visible = false;
    userInfoPanel.Visible = true;

    SetLabels();
  }

  protected void ChangeInfoButton_OnClick(object sender, EventArgs args)
  {
    enterUserInfoPanel.Visible = true;
    userInfoPanel.Visible = true;
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>User Information</title>
</head>
<body>
  <form id="form1" runat="server">
    <h3>
      User information</h3>
    <asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
    <asp:Panel ID="enterUserInfoPanel" runat="server">
      <table cellpadding="3" border="0">
        <tr>
          <td>
            First name:</td>
          <td>
            <asp:TextBox ID="firstNameTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Last name:</td>
          <td>
            <asp:TextBox ID="lastNameTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Address:</td>
          <td>
            <asp:TextBox ID="addressTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            City:</td>
          <td>
            <asp:TextBox ID="cityTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            State or Province:</td>
          <td>
            <asp:TextBox ID="stateOrProvinceTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Zip Code/Postal Code:</td>
          <td>
            <asp:TextBox ID="zipCodeTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Country:</td>
          <td>
            <asp:TextBox ID="countryTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            &nbsp;</td>
          <td>
            <asp:Button ID="enterInfoButton" runat="server" Text="Enter user information" OnClick="EnterInfoButton_OnClick" /></td>
        </tr>
      </table>
    </asp:Panel>
    <asp:Panel ID="userInfoPanel" runat="server">
      <table cellpadding="3" border="0">
        <tr>
          <td>
            Name:</td>
          <td>
            <asp:Label ID="firstNameLabel" runat="server" />
            <asp:Label ID="lastNameLabel" runat="server" />
          </td>
        </tr>
        <tr>
          <td valign="top">
            address:</td>
          <td>
            <asp:Label ID="addressLabel" runat="server" /><br />
            <asp:Label ID="cityLabel" runat="server" />,
            <asp:Label ID="stateOrProvinceLabel" runat="server" />
            <asp:Label ID="zipCodeLabel" runat="server" /><br />
            <asp:Label ID="countryLabel" runat="server" />
          </td>
        </tr>
        <tr>
          <td>
            &nbsp;</td>
          <td>
            <asp:Button ID="changeInfoButton" runat="server" Text="Change user information" OnClick="ChangeInfoButton_OnClick" /></td>
        </tr>
      </table>
    </asp:Panel>
  </form>
</body>
</html>

<%@ Page Language="VB" %>

<%@ Import Namespace="System.Collections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
  Public Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs)
    If Not IsPostBack Then
      If Session("Address") Is Nothing Then
        EnterUserInfoPanel.Visible = True
        UserInfoPanel.Visible = False
      Else
        EnterUserInfoPanel.Visible = False
        UserInfoPanel.Visible = True
        
        SetLabels()
      End If
    End If
  End Sub
  
  Protected Sub SetLabels()
    FirstNameLabel.Text = Session("FirstName").ToString()
    LastNameLabel.Text = Session("LastName").ToString()
    AddressLabel.Text = Session("Address").ToString()
    CityLabel.Text = Session("City").ToString()
    StateOrProvinceLabel.Text = Session("StateOrProvince").ToString()
    ZipCodeLabel.Text = Session("ZipCode").ToString()
    CountryLabel.Text = Session("Country").ToString()
  End Sub
  
  Protected Sub EnterInfoButton_OnClick(ByVal sender As Object, ByVal args As EventArgs)
    Session("FirstName") = Server.HtmlEncode(FirstNameTextBox.Text)
    Session("LastName") = Server.HtmlEncode(LastNameTextBox.Text)
    Session("Address") = Server.HtmlEncode(AddressTextBox.Text)
    Session("City") = Server.HtmlEncode(CityTextBox.Text)
    Session("StateOrProvince") = Server.HtmlEncode(StateOrProvinceTextBox.Text)
    Session("ZipCode") = Server.HtmlEncode(ZipCodeTextBox.Text)
    Session("Country") = Server.HtmlEncode(CountryTextBox.Text)
    
    EnterUserInfoPanel.Visible = False
    UserInfoPanel.Visible = True
    
    SetLabels()
  End Sub
  
  Protected Sub ChangeInfoButton_OnClick(ByVal sender As Object, ByVal args As EventArgs)
    EnterUserInfoPanel.Visible = True
    UserInfoPanel.Visible = False
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>User Information</title>
</head>
<body>
  <form id="form1" runat="server">
    <h3>
      User information</h3>
    <asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
    <asp:Panel ID="EnterUserInfoPanel" runat="server">
      <table cellpadding="3" border="0">
        <tr>
          <td>
            First name:</td>
          <td>
            <asp:TextBox ID="FirstNameTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Last name:</td>
          <td>
            <asp:TextBox ID="LastNameTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Address:</td>
          <td>
            <asp:TextBox ID="AddressTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            City:</td>
          <td>
            <asp:TextBox ID="CityTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            State or Province:</td>
          <td>
            <asp:TextBox ID="StateOrProvinceTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Zip Code/Postal Code:</td>
          <td>
            <asp:TextBox ID="ZipCodeTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            Country:</td>
          <td>
            <asp:TextBox ID="CountryTextBox" runat="server" /></td>
        </tr>
        <tr>
          <td>
            &nbsp;</td>
          <td>
            <asp:Button ID="EnterInfoButton" runat="server" Text="Enter user information" OnClick="EnterInfoButton_OnClick" /></td>
        </tr>
      </table>
    </asp:Panel>
    <asp:Panel ID="UserInfoPanel" runat="server">
      <table cellpadding="3" border="0">
        <tr>
          <td>
            Name:</td>
          <td>
            <asp:Label ID="FirstNameLabel" runat="server" />
            <asp:Label ID="LastNameLabel" runat="server" />
          </td>
        </tr>
        <tr>
          <td valign="top">
            Address:</td>
          <td>
            <asp:Label ID="AddressLabel" runat="server" /><br />
            <asp:Label ID="CityLabel" runat="server" />,
            <asp:Label ID="StateOrProvinceLabel" runat="server" />
            <asp:Label ID="ZipCodeLabel" runat="server" /><br />
            <asp:Label ID="CountryLabel" runat="server" />
          </td>
        </tr>
        <tr>
          <td>
            &nbsp;</td>
          <td>
            <asp:Button ID="ChangeInfoButton" runat="server" Text="Change user information" OnClick="ChangeInfoButton_OnClick" /></td>
        </tr>
      </table>
    </asp:Panel>
  </form>
</body>
</html>

Commenti

ASP.NET fornisce la gestione dello stato sessione per consentire di archiviare le informazioni associate a una sessione del browser univoca tra più richieste. È possibile archiviare una raccolta di valori a cui fa riferimento un nome di chiave o un indice numerico. L'accesso ai valori e alle funzionalità della sessione è disponibile usando la HttpSessionState classe , accessibile tramite la Session proprietà dell'oggetto corrente HttpContexto la Session proprietà dell'oggetto Page.

I dati della sessione sono associati a una sessione del browser specifica usando un identificatore univoco. Per impostazione predefinita, questo identificatore viene archiviato in un cookie di sessione non scaduto nel browser, ma è anche possibile configurare l'applicazione per archiviare l'identificatore di sessione nell'URL impostando l'attributo cookieless su true o UseUri nell'elemento sessionState della configurazione dell'applicazione. È possibile avere ASP.NET determinare se i cookie sono supportati dal browser specificando un valore di UseDeviceProfile per l'attributo cookieless . È anche possibile avere ASP.NET determinare se i cookie sono abilitati per il browser specificando un valore di AutoDetect per l'attributo cookieless . Se i cookie sono supportati quando UseDeviceProfile viene specificato o abilitato quando AutoDetect viene specificato, l'identificatore di sessione verrà archiviato in un cookie; in caso contrario, l'identificatore della sessione verrà archiviato nell'URL.

Le sessioni vengono avviate durante la prima richiesta e i valori della sessione verranno mantenuti finché una nuova richiesta viene effettuata dal browser prima del numero di minuti specificato nel passaggio della Timeout proprietà. Quando inizia una nuova sessione, viene generato l'evento di sessione Start . È possibile usare questo evento per eseguire operazioni aggiuntive all'inizio di una sessione, ad esempio l'impostazione dei valori di sessione predefiniti. Quando si verifica il timeout di una sessione, viene chiamato il Abandon metodo o l'applicazione ASP.NET viene arrestata, viene generato l'evento di sessione End . È possibile usare questo evento per eseguire qualsiasi pulizia necessaria. L'evento End viene generato solo quando lo stato mode della sessione è impostato su InProc.

Per migliorare le prestazioni, le sessioni che usano cookie non allocano l'archiviazione delle sessioni fino a quando i dati non vengono effettivamente archiviati nell'oggetto Session . Per altre informazioni, vedere la proprietà SessionID.

Lo stato della sessione non persiste tra i limiti dell'applicazione ASP.NET. Se un browser passa a un'altra applicazione, le informazioni sulla sessione non sono disponibili per la nuova applicazione.

I valori di sessione vengono archiviati in memoria nel server Web, per impostazione predefinita. È anche possibile archiviare i valori di sessione in un database di SQL Server, in un server di stato ASP.NET o in un server personalizzato. In questo modo è possibile mantenere i valori di sessione nei casi in cui il processo ASP.NET o IIS o l'applicazione ASP.NET viene riavviata e per rendere disponibili i valori di sessione in tutti i server di una Web farm. Questo comportamento viene configurato impostando l'attributo mode su un valore valido SessionStateMode nell'elemento sessionState della configurazione dell'applicazione. Per altre informazioni, vedere Modalità stato sessione.

Le alternative allo stato della sessione includono lo stato dell'applicazione (vedere la Application proprietà) e la cache ASP.NET (vedere lo System.Web.Caching spazio dei nomi), che archiviano le variabili a cui è possibile accedere da tutti gli utenti di un'applicazione ASP.NET; il profilo ASP.NET (vedere lo System.Web.Profile spazio dei nomi), che rende persistenti i valori utente in un archivio dati senza scadenza usando un timeout; ASP.NET System.Web.UI.WebControls, che rende persistenti i valori di controllo in ; Cookiesla ViewStateQueryString proprietà e i campi in un modulo HTML disponibili da un modulo HTTP POST utilizzando la Form raccolta. Per altre informazioni sulle differenze tra lo stato della sessione e altre alternative di gestione dello stato, vedere ASP.NET State Management Recommendations.

Proprietà

CodePage

Ottiene o imposta l'identificatore del set di caratteri per la sessione corrente.

Contents

Ottiene un riferimento all'oggetto stato sessione corrente.

CookieMode

Ottiene un valore che indica se l'applicazione è configurata per sessioni senza cookie.

Count

Ottiene il numero di elementi nella raccolta degli stati sessione.

IsCookieless

Ottiene un valore che indica se l'ID della sessione è incorporato nell'URL o memorizzato in un cookie HTTP.

IsNewSession

Ottiene un valore che indica se la sessione è stata creata con la richiesta corrente.

IsReadOnly

Ottiene un valore che indica se la sessione è di sola lettura.

IsSynchronized

Ottiene un valore che indica se l'accesso all'insieme di valori relativi allo stato sessione è sincronizzato (thread-safe).

Item[Int32]

Ottiene o imposta un valore di sessione in base all'indice numerico.

Item[String]

Ottiene o imposta un valore di sessione in base al nome.

Keys

Ottiene un insieme di chiavi per tutti i valori archiviati nell'insieme dello stato sessione.

LCID

Ottiene o imposta l'identificatore delle impostazioni locali (LCID) della sessione corrente.

Mode

Ottiene la modalità corrente dello stato sessione.

SessionID

Ottiene l'identificatore univoco della sessione.

StaticObjects

Ottiene un insieme di oggetti dichiarati da tag <object Runat="Server" Scope="Session"/> all'interno del file Global.asax dell'applicazione ASP.NET.

SyncRoot

Ottiene un oggetto che può essere usato per sincronizzare l'accesso alla raccolta dei valori di stato sessione.

Timeout

Ottiene o imposta il periodo di tempo, in minuti, consentito tra le richieste prima che il provider dello stato sessione termini la sessione.

Metodi

Abandon()

Annulla la sessione corrente.

Add(String, Object)

Aggiunge un nuovo elemento all'insieme dello stato sessione.

Clear()

Rimuove tutte le chiavi e i valori dalla raccolta di stato sessione.

CopyTo(Array, Int32)

Copia la raccolta dei valori relativi allo stato sessione in una matrice unidimensionale, a partire dall'indice specificato nella matrice.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetEnumerator()

Restituisce un enumeratore che può essere usato per leggere tutti i nomi di variabile di stato sessione nella sessione corrente.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Remove(String)

Elimina un elemento dalla raccolta degli stati sessione.

RemoveAll()

Rimuove tutte le chiavi e i valori dalla raccolta di stato sessione.

RemoveAt(Int32)

Elimina un elemento in corrispondenza dell'indice specificato dall'insieme dello stato sessione.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Metodi di estensione

Cast<TResult>(IEnumerable)

Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato.

OfType<TResult>(IEnumerable)

Filtra gli elementi di un oggetto IEnumerable in base a un tipo specificato.

AsParallel(IEnumerable)

Consente la parallelizzazione di una query.

AsQueryable(IEnumerable)

Converte un oggetto IEnumerable in un oggetto IQueryable.

Si applica a

Vedi anche