English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Sessão JSP

HTTP é um protocolo sem estado, o que significa que cada vez que o cliente busca uma página da web, uma conexão de servidor separada deve ser aberta, portanto, o servidor não registra nenhuma informação de solicitação do cliente anterior.

Existem três métodos para manter a sessão entre o cliente e o servidor:

    Cookies

O servidor de rede pode especificar um ID de sessão único como cookie para representar cada cliente, usado para identificar a próxima solicitação do cliente.

Isso pode não ser uma maneira eficaz, pois muitas vezes os navegadores não garantem que suportem cookies, então não recomendamos usar esse método para manter a sessão.

    Campo de formulário oculto

Um servidor de rede pode enviar um campo de formulário oculto e um ID de sessão único, conforme abaixo:

<input type="hidden" name="sessionid" value="12345">

Este item significa que, quando o formulário é submetido, o nome e o valor especificados serão automaticamente incluídos nos dados GET ou POST. A cada vez que o navegador enviar uma solicitação, o valor de session_id pode ser usado para salvar o rastro de diferentes navegadores.

Essa abordagem pode ser eficaz, mas ao clicar em um link <A HREF>, não ocorre evento de submissão de formulário, portanto, o suporte oculto de campo de formulário também não é compatível com o rastreamento de sessão geral.

    Redirecionar URL

Você pode adicionar alguns dados adicionais ao final de cada URL para distinguir as sessões, e o servidor pode usar esses dados para associar o identificador de sessão.

Por exemplo, http://oldtoolbag.com/file.htm;sessionid=12345, o identificador de sessão é sessionid=12345, o servidor pode usar esses dados para identificar o cliente.

Em comparação, redirecionar URLs é uma maneira melhor, mesmo que o navegador não suporte cookies, ele ainda pode funcionar, mas a desvantagem é que você deve especificar dinamicamente o ID de sessão para cada URL, mesmo que seja uma simples página HTML.

    Objeto session

Além dos métodos mencionados acima, o JSP utiliza a interface HttpSession fornecida pelo servlet para identificar um usuário, armazenando todas as informações de acesso do usuário.

Pelo padrão, o JSP permite o rastreamento de sessão. Um novo objeto HttpSession será automaticamente instanciado para um novo exemplo de cliente. Para desativar o rastreamento de sessão, é necessário desativá-lo explicitamente, ajustando o valor da propriedade session da diretiva page para false, conforme abaixo:

<%@ page session="false" %>

O motor JSP expõe implicitamente o objeto session aos desenvolvedores. Devido à disponibilidade do objeto session, os desenvolvedores podem armazenar ou recuperar dados de forma conveniente.

A tabela a seguir lista alguns métodos importantes do objeto session:

S.N.Método & Descrição
                1public Object getAttribute(String name) Retorna o objeto vinculado ao nome especificado no objeto session, se não existir, retorna null
                2public Enumeration getAttributeNames() Retorna todos os nomes dos objetos no objeto session
                3public long getCreationTime() Retornar o tempo de criação do objeto session, em milissegundos, a partir de1970 anos1mês1A contar das 0h
                4public String getId() Retornar o ID do objeto session
                5public long getLastAccessedTime() Retornar o tempo da última visita do cliente, em milissegundos, a partir de1970 anos1mês1A contar das 0h
                6public int getMaxInactiveInterval() Retornar o intervalo máximo de tempo, em segundos, durante o qual o contêiner servlet manterá a sessão aberta
                7public void invalidate() Invalidar a sessão, desvincular qualquer objeto vinculado à essa sessão
                8public boolean isNew() Retornar se é um novo cliente ou se o cliente recusou se juntar à sessão
                9public void removeAttribute(String name) Remover o objeto especificado pelo nome da sessão
                10public void setAttribute(String name, Object value)  Usar o nome e valor especificados para criar um objeto e vinculá-lo à sessão
                11public void setMaxInactiveInterval(int interval) Usado para especificar o tempo, em segundos, durante o qual o contêiner servlet manterá a sessão válida

Aplicação de Sessão JSP

Esta instância descreve como usar o objeto HttpSession para obter o tempo de criação e a última vez de acesso. Vamos associar um novo objeto session ao objeto request, se este ainda não existir.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // Obter o tempo de criação da sessão
   Date createTime = new Date(session.getCreationTime());
   // Obter o tempo da última página visitada
   Date lastAccessTime = new Date(session.getLastAccessedTime());
   String title = "nova visita ao exemplo de site básico de tutorial";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");
   // detectar se há novos usuários acessando a página web
   if (session.isNew()){
      title = "exemplo de site básico de tutorial de acesso";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
       visitCount = (Integer)session.getAttribute(visitCountKey);
       visitCount += 1;
       userID = (String)session.getAttribute(userIDKey);
       session.setAttribute(visitCountKey,  visitCount);
   }
%>
<html>
<head>
<title>rastreamento de sessão</title>
</head>
<body>
<h1>rastreamento de sessão</h1>
<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>informações da sessão</th>
   <th>valor</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>hora de criação</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>última hora de acesso</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>ID do usuário</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>vezes de acesso</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

tentando acessar http://localhost:8080/testjsp/main.jsp Ao executar pela primeira vez, você obterá o seguinte resultado:

Ao visitar novamente, você obterá o seguinte resultado:

Excluir dados da Sessão

Após o processamento dos dados da sessão do usuário, você pode ter as seguintes opções:

  • Remover um atributo específico:

    Chame o método public void removeAttribute(String name) para remover o atributo especificado.

  • Excluir toda a sessão:

    Chame o método public void invalidate() para tornar toda a sessão inválida.

  • Definir a validade da sessão:

    Chame o método public void setMaxInactiveInterval(int interval) para definir o tempo de expiração da sessão.

  • Deslogar usuário:

    Suporta servlet2.4Versão do servidor, você pode chamar o método logout() para deslogar o usuário e tornar todas as sessões relacionadas inválidas.

  • Configurar o arquivo web.xml:

    Se estiver usando o Tomcat, você pode configurar o arquivo web.xml da seguinte forma:

  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

O tempo de expiração é em minutos, o tempo de expiração padrão do Tomcat é30 minutos.

O método getMaxInactiveInterval( ) no Servlet retorna o tempo de expiração em segundos. Se a configuração no web.xml for15Se passar 1 minuto, o método getMaxInactiveInterval( ) retornará900。