Latest web development tutorials

Sessão JSP

HTTP é um protocolo sem estado, o que significa que cada vez que um cliente recupera páginas, deve abrir um servidor de conexão separada, o servidor não gravar o cliente anterior solicita qualquer informação.

Há três maneiras de manter sessões de cliente e servidor:


bolinhos

servidor de rede pode atribuir um ID de sessão exclusiva como um cookie para representar cada cliente para identificar a próxima requisição do cliente.

Isto pode não ser uma forma eficiente, porque muitas vezes não necessariamente apoiar o cookie do navegador, de modo que nós não recomendamos usar este método para manter a sessão.


campos de formulário ocultos

Um servidor web pode enviar um ocultos campos do formulário HTML e um ID de sessão única, como este:

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

Esta entrada significa que quando o formulário é enviado, o nome eo valor especificado serão automaticamente incluídos nos dados GET ou POST. Sempre que o navegador envia um pedido, o valor session_id pode ser utilizado para salvar diferente trajectória navegador.

Esta abordagem pode ser uma forma eficaz, mas não produz um evento de envio do formulário Clique <A HREF> guia hiperlink e campos do formulário, portanto, escondidos não suportam rastreamento de sessão genérico.


regravação de URL

Pode adicionar alguns dados adicionais por trás de cada URL para distinguir a sessão, de acordo com o servidor de dados pode ser associado identificador de sessão.

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

Em contraste, a regravação de URL é uma maneira melhor, mesmo se o navegador não suporta cookies também podem funcionar, mas a desvantagem é que você deve especificar um ID da sessão para cada URL dinâmico, mesmo que seja uma página HTML simples.


objetos de sessão

Além dos acima diversos métodos fora, JSP interface servlet HttpSession fornece usar para identificar um usuário, para armazenar todo o acesso do usuário à informação.

Por padrão, JSP permite que o rastreamento de sessão, um novo objeto HttpSession automaticamente para novo cliente instanciado. rastreamento de sessão proibição precisa transformá-lo explicitamente fora por o valor do atributo sessão diretiva de página como falsa para alcançar, como segue:

<%@ page session="false" %>

motor JSP objeto de sessão implícito é exposto para o desenvolvedor. Ao fornecer um objeto de sessão, os desenvolvedores podem facilmente armazenar ou recuperar dados.

A tabela a seguir lista alguns do objeto maneiras sessão importante:

SN Method & descrição
1 getAttribute public Object (String name)

O objeto retornado sessão de objeto acoplado com o nome especificado, ou null se inexistente
2 getAttributeNames enumeração pública ()

Retorna o objeto de sessão todos os nomes de objetos
3 getCreationTime longa pública ()

Retorna o objeto de sessão é criada tempo, em milissegundos, entre 1 de Janeiro 1970, a data de início da manhã
4 Cadeia getId pública ()

Retorna a identificação do objeto da sessão
5 getLastAccessedTime longa pública ()

Retorna a última vez que o cliente visitou, em milissegundos, entre 1 de Janeiro 1970, a data de início da manhã
6 getMaxInactiveInterval int público ()

Retorna o intervalo de tempo máximo, em segundos, servlet container irá manter a sessão aberta neste momento
7 public void invalidate ()

A invalidação da sessão, a desagregação quaisquer objetos vinculado à sessão
8 boolean pública isNew (

Retorna se um novo cliente, ou se o cliente se recusou a participar da sessão
9 removeAttribute public void (String name)

Remover o nome especificado objeto de sessão
10 setAttribute public void (nome String, Object valor)

Para produzir um objeto com o nome eo valor especificado e vinculado à sessão
11 setMaxInactiveInterval public void (intervalo de int)

Para especificar o tempo, em segundos, servlet container irá manter a sessão válida durante este período

Aplicação sessão JSP

Este exemplo descreve como usar o objeto HttpSession para obter o tempo de criação e último tempo de acesso. Nós será um novo objeto de sessão para o objeto do pedido associado, se este objeto ainda não existir.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // 获取session创建时间
   Date createTime = new Date(session.getCreationTime());
   // 获取最后访问页面的时间
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      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>Session 跟踪</title>
</head>
<body>

<h1>Session 跟踪</h1>

<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session 信息</th>
   <th>值</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>创建时间</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>最后访问时间</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>用户 ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>访问次数</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

Tente acessar http: // localhost: 8080 / testjsp / main.jsp, executado pela primeira vez terá os seguintes resultados:

Visitar novamente, vamos obter os seguintes resultados:


Apagar dados da sessão

Quando terminou de processar os dados da sessão de um usuário, você tem as seguintes opções:

  • Remover uma propriedade específica:

    Chama o método public void removeAttribute (String nome) para remover a propriedade especificada.

  • Para excluir uma conversa inteira:

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

  • Configuração Session Duração:

    Chama o método public void setMaxInactiveInterval (intervalo de int) para definir o tempo limite da sessão.

  • Entrar Usuário:

    Servlet2.4 versões suportadas do servidor, você pode chamar o método logout () para terminar a sessão do utilizador e todas as sessões associado é inválido.

  • arquivo de configuração web.xml:

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

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

Time-out em minutos, Tomcat tempo limite padrão é de 30 minutos.

Servlet no método getMaxInactiveInterval () retorna os segundos de tempo de espera. Se o web.xml é configurado durante 15 minutos, em seguida, getMaxInactiveInterval () método retornará 900.