Você está na página 1de 4

ASP.

NET com C#
ESTADO DA SESSO
OBJETIVO:
1) Compreender a importncia do gerenciamento do estado da sesso em uma
aplicao Web.
2) Utilizar o gerenciador do estado da sesso (objeto Session).
3) Aprender a configurar o estado da sesso
4) Alertar-se das diferentes possibilidades para o armazenamento do estado da
sesso em ASP.NET.
INTRODUO
Este captulo cobre o gerenciamento do estado da sesso em aplicaes ASP.NET.
importante entender que as aplicaes Web requer que o desenvolvedor esteja bastante
atento em como o estado da aplicao distribudo em quaisquer momentos. Um dos
mais importantes tipos de estados em uma aplicao Web o estado da sesso que
associado com uma nica sesso particular. Devido s aplicaes Web serem
distribudas por natureza e devido ao protocolo HTTP ser stateless, o controle sobre
cada um dos clientes deve ser feito deliberadamente.
O estado da sesso em .NET manipulado pelo objeto Session. Este um objeto
dicionrio, automaticamente criado com cada sesso (caso o estado da sesso esteja
habilitado). O objeto em questo facilmente acessvel atravs de outro objeto:
HttpContext. O objeto HttpContext pode ser referenciado em qualquer ponto durante a
solicitao (request). O processo de associar o estado do usurio com uma sesso de
usurio particular automaticamente feito pelo ASP.NET. Alm do desenvolvedor poder
escolher como controlar o estado de sesso, possvel tambm informar ao ASP.NET
onde armazenar o estado da sesso.
A NECESSIDADE
A programao Web se destaca por ter que gerenciar uma aplicao que serve a
mltiplos usurios distribudos por reas diversas. E, o desafio: o protocolo utilizado
stateless. Para aplicaes simples, possvel armazenar alguns dados na view state
(estado de exibio) da pgina. Entretanto, para grandes quantidades de dados, a
experincia do usurio torna-se bastante comprometida (site lento), alm do risco de
segurana j que os itens a serem armazenados ficam trafegando para l e para c com
cada solicitao. Alm disso, somente tipos serializveis pode ser armazenados na view
state e o contedo da mesma perdido ao ser redirecionado para outra pgina.

Os dados da sesso do usurio no pertence de verdade a aplicaes de banco de dados.


Se esse fosse o nico durante todo o ciclo de vida da aplicao, at poderia ser. Mas,
com aplicaes Web, sabemos que esse no o caso. O desenvolvedor precisa trabalhar
com alguma rea pequena para armazenamento de dados que persista durante todo o
ciclo de vida da sesso do usurio. Esse tipo de dado conhecido como estado da
sesso.
DETALHES
Quando o estado da sesso habilitado, o ASP.NET cria um novo objeto Session para
cada nova solicitao. Ele se torna parte do contexto e disponvel pela pgina. O
ASP.NET sela esse objeto com um identificador e reconstitudo quando uma
solicitao chega, contendo um identificador de sesso vlido. O objeto segue a pgina
e se torna um repositrio conveniente para armazenar informaes que tenha que
sobreviver atravs de toda a sesso, no simplesmente pela durao da pgina.
O objeto Session um dicionrio, contendo pares de nome/valor. possvel associar
qualquer objeto baseado na CLR com uma chave (escolhida pelo desenvolvedor) e
posicion-la no objeto Session. Dessa forma, ele estar disponvel quando a prxima
solicitao pertencente quela sesso chegar. O objeto Session muito utilizado em
aplicaes envolvendo carrinhos de compras ou qualquer outro ramo que precise
acompanhar um cliente em particular.
Os dados so acessados usando a chave em questo. Para, por exemplo, armazenar uma
informao fornecida pelo usurio em um objeto Session, o cdigo seria:
void ArmazenarInformacao()
{
String informacaoUsuario = txtInformacao.Text;
Session[informacao] = informacaoUsuario;
}
Para recuperar a informao durante a prxima solicitao, o cdigo seria:
void RecuperarInformacao()
{
String informaoUsuario = Session[informao];
txtInformacao.Text = informacaoUsuario;
}
PRTICA
Vamos criar um site Web com uma pgina que armazena um valor como varivel
membro e como um elemento de estado de sesso. O exemplo ilustra a diferena entre o
estado da pgina durante uma solicitao e os dados da sesso, que persistem alm de
uma solicitao.

Crie um projeto Empty ASP.NET Web Application e nomeie-o como EstadoDeSessao.


Na pgina Default.aspx, arraste e solte uma caixa de texto para que seja entrado alguma
informao pelo usurio a ser armazenada no estado da sesso. Adicione tambm um
label para descrever a caixa de texto. Em seguida, adicione dois botes: o primeiro
para adicionar o dado string de sesso. Ele ir submeter a string para o servidor de
forma a ser salva em um campo local (por enquanto). J o segundo para mostrar o
estado da sesso. Ele ir realizar simplesmente um postback.

V para o evento do primeiro boto e adicione uma string (varivel membro) chamada
stringSessao.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace EstadoDeSessao
{
public partial class Default : System.Web.UI.Page
{
string stringSessao;
protected void Page_Load(object sender, EventArgs e)
{
this. lblResultado.Text = this.stringSessao;
}
protected void btnAdicionarString_Click(object sender, EventArgs e)
{
this.stringSessao = this.txtConteudo.Text;
this.lblResultado.Text = this.stringSessao;
}
}
}
Rode a pgina e digite alguma informao na caixa de texto. Aps isso, pressione o
boto Adicionar string sesso. Perceba que o label de resultado j mostra a informao
digitada. Se voc clicar no boto Mostrar contedo da sesso, o label desaparece. Temos
que lembrar que as pginas so objetos de curta vida. Eles vivem o tempo de durao da
solicitao. Depois, so destrudos. A varivel membro que criamos evaporou-se. Foi

instanciada em seguida uma nova varivel membro (vazia), assim que a pgina fora recriada.
Agora torna-se clara a necessidade de utilizar o estado da sesso, para que o contedo
no seja perdido. Vamos adicionar um novo label, chamado lblResultadoSessao, que
mostrar o resultado do objeto Session.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace EstadoDeSessao
{
public partial class Default : System.Web.UI.Page
{
string stringSessao;
protected void Page_Load(object sender, EventArgs e)
{
this.lblResultado.Text = this.stringSessao;
this.lblResultadoSessao.Text = (string)this.Session["stringSessao"];
}
protected void btnAdicionarString_Click(object sender, EventArgs e)
{
this.stringSessao = this.txtConteudo.Text;
this.lblResultado.Text = this.stringSessao;
this.Session["stringSessao"] = txtConteudo.Text;
this.lblResultadoSessao.Text = (string)this.Session["stringSessao"];
}
}
}
bom sempre recordar que o objeto Session em ASP.NET consegue armazenar
qualquer objeto serializvel que esteja rodando na CLR.

Você também pode gostar