Tecnologia para Web Cookies Enrique Pimentel Leite de Oliveira [email protected] Visão Geral • “Cookies fornecem um meio de aplicativos da Web para armazenar informações específicas de usuário” • Por exemplo, armazenar as preferências do usuário de uma site para que, ao retornar ao site, a aplicação possa recuperar as informações armazenadas anteriormente. O que são cookies? • Um cookie é um pequeno arquivo de texto (normalmente 4096 bytes) que acompanha solicitações e páginas à medida que eles vão entre o servidor Web e navegador do cliente. • O cookie contém informações que o aplicativo Web poderá ler sempre que o usuário visitar o site. Limitações do Cookie • A maioria dos navegadores dão suporte para cookies de até 4096 bytes – Devido a esse limite, normalmente são armazenados apenas um identificador, como por exemplo nome de usuário • A maioria dos navegadores permite apenas 20 cookies por site – Se tentar armazenar mais, os cookies mais antigos serão descartados • Alguns navegadores também colocam um limite absoluto, geralmente 300 cookies para todos os sites visitados Mitos sobre cookies • • • Um cookie pode descobrir email ou informações pessoais. – Falso. Um cookie só tem informações que já foram fornecidas ou podem ser obtidas facilmente pelos sites. Cookies podem transmitir vírus ou spyware. – Falso. Um cookie não contém código, é apenas um pequeno texto. Os cookies podem rastrear os sites que visito. – Em termos. O valor de um cookie é acessível apenas ao site ao qual pertence. Mas se o site X usa uma imagem (ou outro recurso qualquer) de um site Y, o site Y poderá saber se você já o visitou antes no instante em que você visita o site X. Gravando cookies • O navegador é responsável por gerenciar cookies em um sistema de usuário • Cookies são enviados para o navegador através do objeto HttpResponse que expõe uma coleção chamada Cookies • Ao criar um cookie, deve-se especificar um Name e um Value • Cada cookie deve ter um nome exclusivo para que ele possa ser identificado posteriormente quando lido a partir do navegador Gravando cookies • Pode-se também definir uma data de expiração – Cookies expirados são excluídos pelo navegado – É possível definir a data de validade de um cookie para ser de 50 anos a partir de sua criação • Se a expiração de do cookie não for definida, ele será criado mas não será armazenado no disco rígido do usuário • Em vez disso, o cookie será mantido como parte das informações de sessão do usuário, assim que o usuário fechar o navegador, o cookie será descartado Gravando cookies • Duas forma para armazenar cookies: Response.Cookies["userName"].Value = “jonas"; Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1); HttpCookie aCookie = new HttpCookie("lastVisit"); aCookie.Value = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie); Gravando cookies • Cookies com mais de um valor Response.Cookies["userInfo"]["userName"] = “jonas"; Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString(); Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1); HttpCookie aCookie = new HttpCookie("userInfo"); aCookie.Values["userName"] = “jonas"; aCookie.Values["lastVisit"] = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie); Lendo cookies • • Quando um navegador faz uma solicitação para o servidor, ele envia os cookies para esse servidor junto com a solicitação Em aplicativos ASP.NET, pode-se ler os cookies usando o objeto HttpResquest, que está disponível como a propriedade Request de sua classe Page if(Request.Cookies["userName"] != null) Label1.Text=Server.HtmlEncode(Request.Cookies["userName"].Value); if(Request.Cookies["userName"] != null) { HttpCookie aCookie = Request.Cookies["userName"]; Label1.Text = Server.HtmlEncode(aCookie.Value); } Lendo cookies • Observe também que o método HtmlEncode foi chamado para codificar o conteúdo de um cookie antes de exibi-lo na página • Isso garante que um usuário malintencionado não adicionou script executável no cookie Lendo Cookies • Leitura de subchaves if(Request.Cookies["userInfo"] != null) { Label1.Text=Server.HtmlEncode(Request.Cookies["use rInfo"]["userName"]); Label2.Text=Server.HtmlEncode(Request.Cookies["use rInfo"]["lastVisit"]); } Lendo coleções de cookies System.Text.StringBuilder output = new System.Text.StringBuilder(); HttpCookie aCookie; for(int i=0; i<Request.Cookies.Count; i++) { aCookie = Request.Cookies[i]; output.Append("Cookie name = " + Server.HtmlEncode(aCookie.Name) + "<br />"); output.Append("Cookie value = " + Server.HtmlEncode(aCookie.Value) + "<br /><br />"); } Label1.Text = output.ToString(); Lendo coleções com subchaves for(int i=0; i<Request.Cookies.Count; i++) { aCookie = Request.Cookies[i]; output.Append("Name = " + aCookie.Name + "<br />"); if(aCookie.HasKeys) { for(int j=0; j<aCookie.Values.Count; j++) { subkeyName=Server.HtmlEncode( aCookie.Values.AllKeys[j]); subkeyValue=Server.HtmlEncode(aCookie.Values[j]); output.Append("Subkey name = " + subkeyName + "<br />"); output.Append("Subkey value = " + subkeyValue + "<br /><br />"); } } else { output.Append("Value="+Server.HtmlEncode(aCookie.Value) + "<br /><br />"); } } Label1.Text = output.ToString(); Exercício • Criar um programa que salve em um cookie as opções selecionadas por um usuário na página e depois carregue as opções selecionadas em um listbox, conforme exemplo: Bibliografia • • Ler artigo: http://msdn2.microsoft.com/ptbr/library/ms178194(VS.80).aspx http://br.mozdev.org/firefox/cookies