English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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:
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.
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.
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.
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 |
---|---|
1 | public Object getAttribute(String name) Retorna o objeto vinculado ao nome especificado no objeto session, se não existir, retorna null |
2 | public Enumeration getAttributeNames() Retorna todos os nomes dos objetos no objeto session |
3 | public long getCreationTime() Retornar o tempo de criação do objeto session, em milissegundos, a partir de1970 anos1mês1A contar das 0h |
4 | public String getId() Retornar o ID do objeto session |
5 | public long getLastAccessedTime() Retornar o tempo da última visita do cliente, em milissegundos, a partir de1970 anos1mês1A contar das 0h |
6 | public int getMaxInactiveInterval() Retornar o intervalo máximo de tempo, em segundos, durante o qual o contêiner servlet manterá a sessão aberta |
7 | public void invalidate() Invalidar a sessão, desvincular qualquer objeto vinculado à essa sessão |
8 | public boolean isNew() Retornar se é um novo cliente ou se o cliente recusou se juntar à sessão |
9 | public void removeAttribute(String name) Remover o objeto especificado pelo nome da sessão |
10 | public void setAttribute(String name, Object value) Usar o nome e valor especificados para criar um objeto e vinculá-lo à sessão |
11 | public void setMaxInactiveInterval(int interval) Usado para especificar o tempo, em segundos, durante o qual o contêiner servlet manterá a sessão válida |
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:
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。