JSP - Tratamento de Cookies

Neste capítulo, discutiremos o tratamento de cookies em JSP. Cookies são arquivos de texto armazenados no computador cliente e são mantidos para vários fins de rastreamento de informações. JSP suporta cookies HTTP de forma transparente usando tecnologia de servlet subjacente.

Existem três etapas envolvidas na identificação e retorno de usuários -

  • O script de servidor envia um conjunto de cookies para o navegador. Por exemplo, nome, idade ou número de identificação, etc.

  • O navegador armazena essas informações na máquina local para uso futuro.

  • Na próxima vez que o navegador enviar qualquer solicitação ao servidor da web, ele enviará essas informações de cookies para o servidor e o servidor usará essas informações para identificar o usuário ou também para alguma outra finalidade.

Este capítulo irá ensiná-lo a definir ou redefinir cookies, como acessá-los e como excluí-los usando programas JSP.

A anatomia de um biscoito

Os cookies geralmente são definidos em um cabeçalho HTTP (embora o JavaScript também possa definir um cookie diretamente em um navegador). Um JSP que define um cookie pode enviar cabeçalhos parecidos com este -

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Como você pode ver, o Set-Cookie header contém a name value pair, a GMT date, a path e a domain. O nome e o valor serão codificados por URL. oexpires campo é uma instrução para o navegador "forget" o cookie após a data e hora fornecidas.

Se o navegador estiver configurado para armazenar cookies, ele manterá essas informações até a data de expiração. Se o usuário apontar o navegador para qualquer página que corresponda ao caminho e domínio do cookie, ele reenviará o cookie ao servidor. Os cabeçalhos do navegador podem ser parecidos com isto -

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126

Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Um script JSP terá acesso aos cookies por meio do método de solicitação request.getCookies()que retorna uma matriz de objetos Cookie .

Métodos de Cookies Servlet

A tabela a seguir lista os métodos úteis associados ao objeto Cookie que você pode usar ao manipular cookies em JSP -

S.No. Método e Descrição
1

public void setDomain(String pattern)

Este método define o domínio ao qual o cookie se aplica; por exemplo, tutorialspoint.com.

2

public String getDomain()

Este método obtém o domínio ao qual o cookie se aplica; por exemplo, tutorialspoint.com.

3

public void setMaxAge(int expiry)

Este método define quanto tempo (em segundos) deve decorrer antes que o cookie expire. Se você não definir isso, o cookie durará apenas para a sessão atual.

4

public int getMaxAge()

Este método retorna a idade máxima do cookie, especificada em segundos, por padrão, -1 indicando que o cookie irá persistir até o navegador desligar.

5

public String getName()

Este método retorna o nome do cookie. O nome não pode ser alterado após a criação.

6

public void setValue(String newValue)

Este método define o valor associado ao cookie.

7

public String getValue()

Este método obtém o valor associado ao cookie.

8

public void setPath(String uri)

Este método define o caminho ao qual este cookie se aplica. Se você não especificar um caminho, o cookie será retornado para todos os URLs no mesmo diretório da página atual, bem como para todos os subdiretórios.

9

public String getPath()

Este método obtém o caminho ao qual este cookie se aplica.

10

public void setSecure(boolean flag)

Este método define o valor booleano que indica se o cookie deve ser enviado apenas por conexões criptografadas (ou seja, SSL).

11

public void setComment(String purpose)

Este método especifica um comentário que descreve a finalidade de um cookie. O comentário é útil se o navegador apresentar o cookie ao usuário.

12

public String getComment()

Este método retorna o comentário que descreve a finalidade deste cookie, ou null se o cookie não tiver comentários.

Configurando Cookies com JSP

Definir cookies com JSP envolve três etapas -

Etapa 1: Criação de um objeto Cookie

Você chama o construtor Cookie com um nome de cookie e um valor de cookie, sendo que ambos são strings.

Cookie cookie = new Cookie("key","value");

Lembre-se de que nem o nome nem o valor devem conter espaço em branco ou qualquer um dos seguintes caracteres -

[ ] ( ) = , " / ? @ : ;

Etapa 2: definir a idade máxima

Você usa setMaxAgepara especificar por quanto tempo (em segundos) o cookie deve ser válido. O código a seguir irá configurar um cookie por 24 horas.

cookie.setMaxAge(60*60*24);

Etapa 3: enviar o cookie para os cabeçalhos de resposta HTTP

Você usa response.addCookie para adicionar cookies no cabeçalho de resposta HTTP da seguinte forma

response.addCookie(cookie);

Exemplo

Vamos modificar nosso exemplo de formulário para definir os cookies para o nome e o sobrenome.

<%
   // Create cookies for first and last names.      
   Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
   Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
   
   // Set expiry date after 24 Hrs for both the cookies.
   firstName.setMaxAge(60*60*24); 
   lastName.setMaxAge(60*60*24); 
   
   // Add both the cookies in the response header.
   response.addCookie( firstName );
   response.addCookie( lastName );
%>

<html>
   <head>
      <title>Setting Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Setting Cookies</h1>
      </center>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Vamos colocar o código acima em main.jsp arquivo e use-o na seguinte página HTML -

<html>
   <body>
      
      <form action = "main.jsp" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
      
   </body>
</html>

Mantenha o conteúdo HTML acima em um arquivo hello.jsp e colocar hello.jsp e main.jsp dentro <Tomcat-installation-directory>/webapps/ROOTdiretório. Quando você vai acessarhttp://localhost:8080/hello.jsp, aqui está a saída real do formulário acima.

Tente inserir o nome e o sobrenome e, a seguir, clique no botão enviar. Isso exibirá o nome e o sobrenome na tela e também definirá dois cookiesfirstName e lastName. Esses cookies serão devolvidos ao servidor na próxima vez que você clicar no botão Enviar.

Na próxima seção, explicaremos como você pode acessar esses cookies novamente em seu aplicativo da web.

Lendo Cookies com JSP

Para ler cookies, você precisa criar uma matriz de objetos javax.servlet.http.Cookie chamando ogetCookies( )método de HttpServletRequest . Em seguida, percorra a matriz e usegetName() e getValue() métodos para acessar cada cookie e valor associado.

Exemplo

Vamos agora ler os cookies que foram definidos no exemplo anterior -

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println("<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Vamos agora colocar o código acima em main.jsparquivo e tente acessá-lo. Se você definir ofirst_name cookie como "John" e o last_name cookie como "Jogador", em seguida, executando http://localhost:8080/main.jsp exibirá o seguinte resultado -

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

Excluir Cookies com JSP

Excluir cookies é muito simples. Se você deseja excluir um cookie, basta seguir estas três etapas -

  • Leia um cookie já existente e armazene-o no objeto Cookie.

  • Defina a idade do cookie como zero usando o setMaxAge() método para excluir um cookie existente.

  • Adicione esse cookie de volta ao cabeçalho da resposta.

Exemplo

O exemplo a seguir mostrará como excluir um cookie existente chamado "first_name" e quando você executar main.jsp JSP da próxima vez, ele retornará um valor nulo para first_name.

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               
               if((cookie.getName( )).compareTo("first_name") == 0 ) {
                  cookie.setMaxAge(0);
                  response.addCookie(cookie);
                  out.print("Deleted cookie: " + 
                  cookie.getName( ) + "<br/>");
               }
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println(
            "<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Vamos agora colocar o código acima no main.jsparquivo e tente acessá-lo. Ele exibirá o seguinte resultado -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Agora execute http: // localhost: 8080 / main.jsp mais uma vez e ele deve exibir apenas um cookie da seguinte forma -

Found Cookies Name and Value

Name : last_name, Value: Player

Você pode excluir seus cookies manualmente no Internet Explorer. Comece no menu Ferramentas e selecione Opções da Internet. Para excluir todos os cookies, clique no botão Excluir Cookies.