Artigo .net Magazine 60 - Mantendo estado no ASP.NET

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Análise sobre as principais formas de manter estado no ASP.NET, suas vantagens e desvantagens.

Esse artigo faz parte da revista .NET Magazine edição 60. Clique aqui para ler todos os artigos desta edição

 

imagem_pdf.jpg

 

Web – Easy .net

Mantendo estado no ASP.NET

Análise sobre as principais formas de manter estado no ASP.NET, suas vantagens e desvantagens

 

Em desenvolvimento web nem sempre é fácil escolher como persistir as informações relacionadas às requisições do visitante, seja referente à autenticação, seja referente à consulta de dados ou qualquer outra informação que julgar necessário manter o estado. O Protocolo de comunicação web HTTP não possui estado durante a comunicação cliente-servidor. Não existe uma única forma de persistência de dados, cada uma possui seus pontos fracos e fortes que devem ser analisados criteriosamente de acordo com o ambiente, tamanho da informação, escala, entre outros. Manter informações na memória do servidor pode ser uma boa idéia, porém só é possível manter estas informações por algum tempo e caso o servidor tenha que ser reiniciado, esta informação pode ser perdida, se salva na memória RAM. Outra possibilidade é manter informações no cliente, utilizando cookies, por exemplo. Sem contar que existem alguns usuários que não habilitam cookies em suas máquinas por questão de segurança, os cookies podem armazenar uma quantidade limitada de informação. O que fazer neste caso? Neste artigo veremos os principais meios de manter o estado na web, as principais vantagens e desvantagens de cada um, e quando utilizá-los.

 

Cookies

O Cookie em sua essência é um arquivo temporário que permite aplicações web salvarem informações em formato texto, na máquina do usuário. O cookie é visto por muitos como o “vilão” de todas as formas de armazenamento, o mais “odiado” pelos usuários, e possivelmente o mais utilizado pelos programadores web. Mas por que o cookie possui esta reputação?

Conforme a internet foi ganhando adeptos, programadores procuravam rastrear tudo que o usuário fazia como: tempo de acesso, histórico de navegação, logs em geral. Estas informações eram salvas em arquivos temporários na máquina do usuário (cookie). Alguns maus programadores salvavam inclusive informações de autenticação de seu site no cookie de forma desprotegida, pois teoricamente apenas o seu servidor pode ler o arquivo, incluindo a senha. Porém alguns navegadores apresentavam falha de segurança, permitindo que outros sites conseguissem ter acesso ao cookie.  Conhecendo estas falhas, alguns sites maliciosos começaram a utilizar-se desta falha de segurança para obter tais informações. A grande maioria dos usuários utiliza a mesma senha para todos os sites, então sendo assim ficava fácil com uma única senha, acessar outros sites. Isto foi possível devido a falhas de alguns navegadores, principalmente até o ano de 2001.

Viram-se casos como pequenas lojas virtuais que salvavam as informações de cartão de crédito em cookie também foram noticiadas há alguns anos. Utilizando computadores públicos, alguns usuários podem obter acesso a sistemas, modificando cookies desprotegido através do bloco de notas. Histórias como estas foram deixando os cookies com uma má fama pelos usuários, tendo até hoje algumas empresas que bloqueiam a criação de cookies nas máquinas de seus funcionários. A maioria dos softwares Anti-Spyware, como o Ad-Aware e o Spybot, consideram os cookies como ameaças e também apagam os cookies quando o usuário faz varredura em seu computador,

Poderia escrever mais algumas páginas de possíveis falhas de seguranças que os cookies podem gerar, mas hoje em dia acredito que existam bem menos destas falhas causadas por cookies, primeiramente porque os navegadores ficaram efetivamente mais seguros do que há alguns anos atrás, e também por que os programadores passaram a ficar mais conscientes e a não salvar informações importantes de forma desprotegida no cookie.

Eu particularmente acredito que o cookie é uma ótima forma de manter estado da aplicação, se bem utilizada. Vamos entender um pouco mais em detalhe o que é o cookie, e como utilizá-lo.

Sabemos que o cookie é um modo de armazenar informações em um arquivo temporário na máquina do cliente. O padrão máximo oficial do cookie é de 4KB, alguns navegadores suportam um pouco mais, mas se sua aplicação for acessada por usuários utilizando diferentes navegadores, é bem recomendado ficar abaixo dos 4KB.

Em aplicações web é possível criar e acessar cookies utilizando JavaScript. No ASP.NET permite que você escreva o cookie no cliente com instruções no próprio servidor. Na Tabela 1 listo as principais propriedades do cookie.

 

Propriedade

Descrição

expires

Determina a data e hora que o cookie perde a validade. Se deixado em branco, ele é inutilizado assim que o navegador for fechado. Se for determinada uma data passada, o cookie é excluído.

domain

Se a propriedade domain for atribuída, o mesmo cookie poderá ser acessado por diferentes servidores, do mesmo domínio.

path

Se atribuído, todas as páginas e sub-páginas (em sub-diretórios) da mesma path poderão acessar o cookie.

secure

Se setado como seguro, só poderá ser acessado por aplicações utilizado HTTPS (Secure Hypertext Transfer Protocol).

Tabela 1. Propriedades do Cookie

 

Agora que você conhece um pouco mais de cookies, vamos aprender como criar utilizando ASP.NET. Como exemplo, criaremos um formulário com uma textbox que receberá a mensagem salva no cookie e um botão que efetuará a ação de salvar o cookie.

Abra o Visual Studio e crie então uma aplicação Web. Apesar de eu estar utilizando o Visual Studio 2008, pode-se utilizar qualquer versão do Visual Studio. Os códigos de exemplo estão em VB.NET, mas sinta-se à vontade para criar em C#.

Após abrir o VS, adicione a página Cookie.aspx. Na Listagem 1 é definido o formulário de teste para a criação do cookie. O formulário é bem simples, contendo uma textbox (txtTextoCookie) permitindo que você digite uma mensagem que será salva no cookie, um botão (btnSalvarCookie) e uma label para exibir o valor salvo.

O código da Listagem 1 será o mesmo de outros exemplos mudando apenas o ID dos controles, para não repetir a mesma listagem, vou indicar apenas os IDs que foram alterados para cada exemplo.

 

Listagem 1. Página de teste do cookie (Cookie.aspx)

<%@ Page Language="VB" AutoEventWireup="false"

CodeFile="Cookie.aspx.vb" Inherits="_Padrao" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        Mensagem:

        <asp:TextBox ID="txtTextoCookie" runat="server"></asp:TextBox>

        <asp:Button ID="btnSalvarCookie" runat="server" Text="Salvar no cookie" />

        <br />

        <asp:Label ID="lblMensagemSalvaCookie" runat="server" Text=""></asp:Label>

    </div>

    </form>

</body>

</html>

 

No primeiro método da Listagem 2 temos o método Page_Load() que é executado sempre que a página for carregada. Neste método uma nova variável de cookie (do tipo HttpCookie) é criada. A requisição do cookie de nome CookieTeste é atribuída a esta variável. Se o valor não for igual a nothing, seu valor então é atribuído à label.

O segundo método da Listagem 2 é que trata o evento do Click do botão btnSalvarCookie. Neste método uma nova variável de cookie é criada, assim como fizemos no método Page_load(). Este cookie então recebe um nome CookieTeste e um valor (texto da textbox). Em seguida uma data de validade do cookie é definida. Neste exemplo estou somando quarenta e oito horas à data atual, ou seja, o cookie vale por dois dias, depois ele será destruído pelo navegador.

 

Listagem 2. Criando e lendo o cookie (Cookie.aspx.vb)

Partial Class _Padrao

    Inherits System.Web.UI.Page

 

    ''' <summary>

    ''' Método quando a página é carregada

    ''' </summary>

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim oCookie As HttpCookie = Request.Cookies("CookieTeste")

 

        If Not IsNothing(oCookie) Then

            lblMensagemSalvaCookie.Text = oCookie.Value

        End If

    End Sub

 

    ''' <summary>

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?