Estado Da Sessão

6
ASP.NET com C# ESTADO DA SESSÃO OBJETIVO: 1) Compreender a importância do gerenciamento do estado da sessão em uma aplicação Web. 2) Utilizar o gerenciador do estado da sessão (objeto Session). 3) Aprender a configurar o estado da sessão 4) Alertar-se das diferentes possibilidades para o armazenamento do estado da sessão em ASP.NET. INTRODUÇÃO Este capítulo cobre o gerenciamento do estado da sessão em aplicações ASP.NET. É importante entender que as aplicações Web requer que o desenvolvedor esteja bastante atento em como o estado da aplicação é distribuído em quaisquer momentos. Um dos mais importantes tipos de estados em uma aplicação Web é o estado da sessão – que é associado com uma única sessão particular. Devido às aplicações Web serem distribuídas por natureza e devido ao protocolo HTTP ser stateless, o controle sobre cada um dos clientes deve ser feito deliberadamente. O estado da sessão em .NET é manipulado pelo objeto Session. Este é um objeto “dicionário”, automaticamente criado com cada sessão (caso o estado da sessão esteja habilitado). O objeto em questão é facilmente acessível através de outro objeto: HttpContext. O objeto HttpContext pode ser referenciado em qualquer ponto durante a solicitação (request). O processo de associar o estado do usuário com uma sessão de usuário particular é automaticamente feito pelo ASP.NET. Além do desenvolvedor

description

Estado Da Sessão

Transcript of Estado Da Sessão

Page 1: Estado Da Sessão

ASP.NET com C#ESTADO DA SESSÃO

OBJETIVO:

1) Compreender a importância do gerenciamento do estado da sessão em uma aplicação Web.

2) Utilizar o gerenciador do estado da sessão (objeto Session).3) Aprender a configurar o estado da sessão4) Alertar-se das diferentes possibilidades para o armazenamento do estado da

sessão em ASP.NET.

INTRODUÇÃO

Este capítulo cobre o gerenciamento do estado da sessão em aplicações ASP.NET. É importante entender que as aplicações Web requer que o desenvolvedor esteja bastante atento em como o estado da aplicação é distribuído em quaisquer momentos. Um dos mais importantes tipos de estados em uma aplicação Web é o estado da sessão – que é associado com uma única sessão particular. Devido às aplicações Web serem distribuídas por natureza e devido ao protocolo HTTP ser stateless, o controle sobre cada um dos clientes deve ser feito deliberadamente.

O estado da sessão em .NET é manipulado pelo objeto Session. Este é um objeto “dicionário”, automaticamente criado com cada sessão (caso o estado da sessão esteja habilitado). O objeto em questão é facilmente acessível através de outro objeto: HttpContext. O objeto HttpContext pode ser referenciado em qualquer ponto durante a solicitação (request). O processo de associar o estado do usuário com uma sessão de usuário particular é automaticamente feito pelo ASP.NET. Além do desenvolvedor poder escolher como controlar o estado de sessão, é possível também informar ao ASP.NET onde armazenar o estado da sessão.

A NECESSIDADE

A programação Web se destaca por ter que gerenciar uma aplicação que serve a múltiplos usuários distribuídos por áreas diversas. E, o desafio: o protocolo utilizado é stateless. Para aplicações simples, é possível armazenar alguns dados na view state (estado de exibição) da página. Entretanto, para grandes quantidades de dados, a experiência do usuário torna-se bastante comprometida (site lento), além do risco de segurança – já que os itens a serem armazenados ficam trafegando para lá e para cá com cada solicitação. Além disso, somente tipos serializáveis pode ser armazenados na view state e o conteúdo da mesma é perdido ao ser redirecionado para outra página.

Page 2: Estado Da Sessão

Os dados da sessão do usuário não pertence de verdade a aplicações de banco de dados. Se esse fosse o único durante todo o ciclo de vida da aplicação, até poderia ser. Mas, com aplicações Web, sabemos que esse não é o caso. O desenvolvedor precisa trabalhar com alguma área pequena para armazenamento de dados que persista durante todo o ciclo de vida da sessão do usuário. Esse tipo de dado é conhecido como estado da sessão.

DETALHES

Quando o estado da sessão é habilitado, o ASP.NET cria um novo objeto Session para cada nova solicitação. Ele se torna parte do contexto e disponível pela página. O ASP.NET “sela” esse objeto com um identificador e é reconstituído quando uma solicitação chega, contendo um identificador de sessão válido. O objeto segue a página e se torna um repositório conveniente para armazenar informações que tenha que sobreviver através de toda a sessão, não simplesmente pela duração da página.

O objeto Session é um dicionário, contendo pares de nome/valor. É possível associar qualquer objeto baseado na CLR com uma chave (escolhida pelo desenvolvedor) e posicioná-la no objeto Session. Dessa forma, ele estará disponível quando a próxima solicitação pertencente àquela sessão chegar. O objeto Session é muito utilizado em aplicações envolvendo carrinhos de compras ou qualquer outro ramo que precise acompanhar um cliente em particular.

Os dados são acessados usando a chave em questão. Para, por exemplo, armazenar uma informação fornecida pelo usuário em um objeto Session, o código seria:

void ArmazenarInformacao(){

String informacaoUsuario = txtInformacao.Text;Session[“informacao”] = informacaoUsuario;

}

Para recuperar a informação durante a próxima solicitação, o código seria:

void RecuperarInformacao(){

String informaçãoUsuario = Session[“informação”];txtInformacao.Text = informacaoUsuario;

}

PRÁTICA

Vamos criar um site Web com uma página que armazena um valor como variável membro e como um elemento de estado de sessão. O exemplo ilustra a diferença entre o estado da página durante uma solicitação e os dados da sessão, que persistem além de uma solicitação.

Crie um projeto Empty ASP.NET Web Application e nomeie-o como EstadoDeSessao. Na página Default.aspx, arraste e solte uma caixa de texto para que seja entrado alguma

Page 3: Estado Da Sessão

informação pelo usuário a ser armazenada no estado da sessão. Adicione também um label para descrever a caixa de texto. Em seguida, adicione dois botões: o primeiro é para adicionar o dado à string de sessão. 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 sessão. Ele irá realizar simplesmente um postback.

Vá para o evento do primeiro botão e adicione uma string (variável 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 página e digite alguma informação na caixa de texto. Após isso, pressione o botão Adicionar string à sessão. Perceba que o label de resultado já mostra a informação digitada. Se você clicar no botão Mostrar conteúdo da sessão, o label desaparece. Temos que lembrar que as páginas são objetos de curta vida. Eles vivem o tempo de duração da solicitação. Depois, são destruídos. A variável membro que criamos evaporou-se. Foi instanciada em seguida uma nova variável membro (vazia), assim que a página fora re-criada.

Page 4: Estado Da Sessão

Agora torna-se clara a necessidade de utilizar o estado da sessão, para que o conteúdo não 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 serializável que esteja rodando na CLR.