HttpSessionState Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece acesso a valores de estado da sessão, bem como a definições ao nível da sessão e métodos de gestão de vida útil.
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
- Herança
-
HttpSessionState
- Implementações
Exemplos
O exemplo de código seguinte define e recupera valores do estado da sessão.
Importante
Este exemplo tem uma caixa de texto que aceita a entrada do utilizador, o que constitui uma potencial ameaça à segurança. Por defeito, as páginas Web do ASP.NET validam que a entrada do utilizador não inclui elementos de script ou HTML. Para mais informações, consulte Visão Geral dos Exploits de Scripts.
<%@ 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>
Observações
O ASP.NET fornece gestão do estado da sessão para lhe permitir armazenar informações associadas a uma sessão única do navegador através de múltiplos pedidos. Pode armazenar uma coleção de valores referenciados por um nome de chave ou por índice numérico. O acesso aos valores e funcionalidades da sessão está disponível usando a HttpSessionState classe, que é acessível através da Session propriedade do atual HttpContext, ou da Session propriedade do Page.
Os dados da sessão estão associados a uma sessão específica do navegador usando um identificador único. Por defeito, este identificador é armazenado num cookie de sessão que não expira no navegador, mas também pode configurar a sua aplicação para armazenar o identificador de sessão na URL, definindo o cookieless atributo para true ou UseUri no elemento sessionState da configuração da sua aplicação. Pode pedir ASP.NET determinar se os cookies são suportados pelo navegador especificando um valor de UseDeviceProfile para o atributo cookieless. Também pode pedir ASP.NET determinar se os cookies estão ativados para o navegador, especificando um valor de AutoDetect para o atributo cookieless. Se os cookies forem suportados quando UseDeviceProfile especificado, ou ativados quando AutoDetect especificados, então o identificador de sessão será armazenado num cookie; caso contrário, o identificador de sessão será armazenado na URL.
As sessões são iniciadas durante o primeiro pedido e os valores das sessões persistirão enquanto um novo pedido for feito pelo navegador antes de passar o número de minutos especificado na Timeout propriedade. Quando uma nova sessão começa, o evento da sessão Start é elevado. Pode usar este evento para realizar qualquer trabalho adicional no início de uma sessão, como definir valores padrão da sessão. Quando uma sessão expira, o método Abandon é chamado, ou a aplicação ASP.NET é desligada, o evento da sessão End é ativado. Pode usar este evento para realizar a limpeza necessária. O End evento é levantado apenas quando o estado mode da sessão está definido para InProc.
Para melhorar o desempenho, as sessões que utilizam cookies não alocam o armazenamento da sessão até que os dados estejam realmente armazenados no Session objeto. Para obter mais informações, consulte a propriedade SessionID.
O estado da sessão não persiste através dos limites da aplicação ASP.NET. Se um navegador navegar para outra aplicação, a informação da sessão não está disponível para a nova aplicação.
Os valores das sessões são armazenados na memória do servidor Web, por defeito. Também pode armazenar valores de sessão numa base de dados SQL Server, num servidor de estado ASP.NET ou num servidor personalizado. Isto permite-lhe preservar os valores da sessão nos casos em que o processo ASP.NET ou IIS ou a aplicação ASP.NET reiniciam e disponibilizar os valores das sessões em todos os servidores de uma Web farm. Este comportamento é configurado ao definir o mode atributo para um valor válido SessionStateMode no elemento sessionState da configuração da sua aplicação. Para mais informações, consulte Session-State Modos.
Alternativas ao estado de sessão incluem o estado da aplicação (ver a propriedade Application) e a cache ASP.NET (ver o espaço de nomes System.Web.Caching), que armazenam variáveis que podem ser acedidas por todos os utilizadores de uma aplicação ASP.NET; o perfil ASP.NET (ver o espaço de nomes System.Web.Profile), que mantém valores de utilizador num armazenamento de dados sem os fazer expirar através de um time-out; ASP.NET System.Web.UI.WebControls, que persistem valores de controlo no ViewState; Cookies; a propriedade QueryString; e campos num formulário HTML disponíveis a partir de uma POST HTTP usando a coleção Form. Para mais detalhes sobre as diferenças entre o estado da sessão e outras alternativas de gestão do estado, consulte ASP.NET Recomendações de Gestão do Estado.
Propriedades
| Name | Description |
|---|---|
| CodePage |
Obtém ou define o identificador do conjunto de caracteres para a sessão atual. |
| Contents |
Obtém uma referência ao objeto de estado de sessão atual. |
| CookieMode |
Recebe um valor que indica se a aplicação está configurada para sessões sem cookies. |
| Count |
Obtém o número de itens na coleção de estado da sessão. |
| IsCookieless |
Recebe um valor que indica se o ID da sessão está embutido na URL ou armazenado num cookie HTTP. |
| IsNewSession |
Recebe um valor que indica se a sessão foi criada com o pedido atual. |
| IsReadOnly |
Recebe um valor que indica se a sessão é apenas de leitura. |
| IsSynchronized |
Recebe um valor que indica se o acesso à coleção de valores do estado da sessão está sincronizado (thread safe). |
| Item[Int32] |
Obtém ou define um valor de sessão por índice numérico. |
| Item[String] |
Recebe ou define um valor de sessão pelo nome. |
| Keys |
Obtém uma coleção das chaves de todos os valores armazenados na coleção de estado de sessão. |
| LCID |
Obtém ou define o identificador local (LCID) da sessão atual. |
| Mode |
Obtém o modo de estado de sessão atual. |
| SessionID |
Obtém o identificador único da sessão. |
| StaticObjects |
Obtém uma coleção de objetos declarados por etiquetas |
| SyncRoot |
Obtém um objeto que pode ser usado para sincronizar o acesso à coleção de valores do estado da sessão. |
| Timeout |
Obtém ou define o tempo, em minutos, permitido entre pedidos antes de o fornecedor de estado da sessão terminar a sessão. |
Métodos
| Name | Description |
|---|---|
| Abandon() |
Cancela a sessão atual. |
| Add(String, Object) |
Adiciona um novo item à coleção de estados de sessão. |
| Clear() |
Remove todas as chaves e valores da coleção de estados de sessão. |
| CopyTo(Array, Int32) |
Copia a coleção de valores do estado da sessão para um array unidimensional, começando no índice especificado no array. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetEnumerator() |
Devolve um enumerador que pode ser usado para ler todos os nomes das variáveis de estado da sessão na sessão atual. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| Remove(String) |
Apaga um item da coleção de estados de sessão. |
| RemoveAll() |
Remove todas as chaves e valores da coleção de estados de sessão. |
| RemoveAt(Int32) |
Elimina um item num índice especificado da coleção de estados de sessão. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
Métodos da Extensão
| Name | Description |
|---|---|
| AsParallel(IEnumerable) |
Permite a paralelização de uma consulta. |
| AsQueryable(IEnumerable) |
Converte um IEnumerable para um IQueryable. |
| Cast<TResult>(IEnumerable) |
Conjura os elementos de an IEnumerable para o tipo especificado. |
| OfType<TResult>(IEnumerable) |
Filtra os elementos de um IEnumerable com base num tipo especificado. |