HttpSessionState Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce l'accesso ai valori dello stato sessione, nonché 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
In questo esempio è presente una casella di testo che accetta l'input dell'utente, che rappresenta una potenziale minaccia per la sicurezza. Per impostazione predefinita, ASP.NET pagine Web verificare che l'input dell'utente non includa elementi SCRIPT o HTML. Per altre informazioni, vedere Cenni preliminari sugli exploit di 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>
</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>
</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>
</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>
</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 della 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 per UseDeviceProfile 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 di sessione verrà archiviato nell'URL.
Le sessioni vengono avviate durante la prima richiesta e i valori di sessione verranno mantenuti finché una nuova richiesta viene effettuata dal browser prima del numero di minuti specificati nel passaggio della Timeout proprietà. All'avvio di 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 le operazioni di pulizia necessarie. 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 ulteriori informazioni, consultare 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 di ASP.NET o IIS o l'applicazione ASP.NET viene riavviato 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àSession-State.
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 tutti gli utenti di un'applicazione ASP.NET; il profilo di 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 ViewState; Cookiesla QueryString proprietà e i campi in un modulo HTML disponibile da un archivio dati 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à
| Nome | Descrizione |
|---|---|
| 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 le sessioni senza cookie. |
| Count |
Ottiene il numero di elementi nella raccolta dello stato sessione. |
| IsCookieless |
Ottiene un valore che indica se l'ID sessione è incorporato nell'URL o archiviato 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 alla raccolta di valori dello 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 una raccolta di chiavi per tutti i valori archiviati nella raccolta dello stato sessione. |
| LCID |
Ottiene o imposta l'identificatore delle impostazioni locali (LCID) della sessione corrente. |
| Mode |
Ottiene la modalità stato sessione corrente. |
| SessionID |
Ottiene l'identificatore univoco per la sessione. |
| StaticObjects |
Ottiene una raccolta di oggetti dichiarati dai |
| SyncRoot |
Ottiene un oggetto che può essere utilizzato per sincronizzare l'accesso all'insieme di valori dello stato sessione. |
| Timeout |
Ottiene o imposta la quantità di tempo consentita, in minuti, tra le richieste prima che il provider di stato sessione termini la sessione. |
Metodi
| Nome | Descrizione |
|---|---|
| Abandon() |
Annulla la sessione corrente. |
| Add(String, Object) |
Aggiunge un nuovo elemento alla raccolta dello stato sessione. |
| Clear() |
Rimuove tutte le chiavi e i valori dalla raccolta di stati sessione. |
| CopyTo(Array, Int32) |
Copia l'insieme di valori dello 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 utilizzato per leggere tutti i nomi delle variabili dello stato sessione nella sessione corrente. |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| Remove(String) |
Elimina un elemento dalla raccolta di stati sessione. |
| RemoveAll() |
Rimuove tutte le chiavi e i valori dalla raccolta di stati sessione. |
| RemoveAt(Int32) |
Elimina un elemento in corrispondenza di un indice specificato dalla raccolta di stati sessione. |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| AsParallel(IEnumerable) |
Abilita la parallelizzazione di una query. |
| AsQueryable(IEnumerable) |
Converte un IEnumerable in un IQueryable. |
| Cast<TResult>(IEnumerable) |
Esegue il cast degli elementi di un IEnumerable al tipo specificato. |
| OfType<TResult>(IEnumerable) |
Filtra gli elementi di un IEnumerable in base a un tipo specificato. |