Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.