Latest web development tutorials

Acompanhamento Sessão servlet

HTTP é um protocolo "apátrida", o que significa que cada vez que o cliente recupera as páginas, o cliente abre uma conexão separada para o servidor Web, o servidor não gravar automaticamente antes de quaisquer pedidos de clientes são reservados.

Mas ainda existem três maneiras de manter a conversa sessão entre o cliente Web eo servidor Web:

bolinhos

Um servidor Web pode ser atribuído um ID de sessão exclusiva que a sessão para cada cookie do cliente Web, as solicitações subseqüentes para o cliente pode ser usado para identificar o cookie recebido.

Isto pode não ser um método eficaz, porque muitos navegadores não suportam biscoito, então nós não recomendamos o uso dessa forma de manter a sessão de sessão.

campos de formulário ocultos

Um servidor Web pode enviar uma ocultos campos do formulário HTML, bem como uma identificação de sessão única sessão, como segue:

<Input type = "hidden" name = value "sessionid" = "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. Toda vez que o navegador da Web envia de volta o pedido, o valor session_id pode ser usado para manter o acompanhamento navegador da Web diferente.

Esta pode ser uma maneira eficaz de manter o rastreamento de sessão sessão, mas clique no link de hipertexto convencional (<a HREF...>) não leva a uma submissão de formulário, para que os campos de formulário ocultos não suportam rastreamento de sessão sessão regular.

Reescrever URL

Você pode acrescentar alguns dados extras em cada extremidade do URL para identificar o identificador de sessão sessão sessão sessão e os dados armazenados sessão sobre servidor sessão associada vai.

Por exemplo, http: //w3cschool.cc/file.htm; sessionid = 12345, identificador de sessão de sessão é anexado como sessionid = 12345, um identificador pode ser acessado o servidor Web para identificar o cliente.

URL reescrita é a melhor maneira de manter a sessão de sessão, ele pode funcionar muito bem quando o navegador não suporta cookies, mas sua desvantagem é gerada dinamicamente para cada URL para atribuir um ID de sessão para a página sessão, mesmo se é muito simples páginas HTML estáticas será, também.

objetos HttpSession

Para além das formas acima de três, servlet também fornece a interface HttpSession, o qual fornece ao utilizador identificar e armazenar informações sobre o utilizador quando um pedido de mais do que uma página cruz ou visitar maneira.

servlet container para usar esta interface para criar uma conversa sessão entre um cliente HTTP e um servidor HTTP. Sessão dura um determinado período de tempo, em várias solicitações de página ou conexões.

Você virá para obter HttpSession objeto chamando o HttpServletRequest Método públicogetSession (), como segue:

HttpSession session = request.getSession ();

Você precisa antes de enviar qualquer conteúdo do documento para o cliente chamarequest.getSession ().Aqui está um resumo dos vários objetos HttpSession importantes métodos estão disponíveis:

序号方法 & 描述
1public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
2public Enumeration getAttributeNames()
该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
3public long getCreationTime()
该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
4public String getId()
该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
5public long getLastAccessedTime()
该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
6public int getMaxInactiveInterval()
该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
7public void invalidate()
该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
8public boolean isNew()
如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
9public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。
10public void setAttribute(String name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话。
11public void setMaxInactiveInterval(int interval)
该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

Exemplos rastreamento de sessão

Este exemplo mostra como usar o objeto HttpSession para obter tempo de criação de sessão de sessão e último tempo de acesso. Se não houver uma sessão de sessão, vamos criar uma nova sessão de solicitações de sessão.

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class SessionTrack
 */
@WebServlet("/SessionTrack")
public class SessionTrack extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// 如果不存在 session 会话,则创建一个 session 对象
		HttpSession session = request.getSession(true);
		// 获取 session 创建时间
		Date createTime = new Date(session.getCreationTime());
		// 获取该网页的最后一次访问时间
		Date lastAccessTime = new Date(session.getLastAccessedTime());
		 
	    //设置日期输出的格式  
	    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
	
		String title = "Servlet Session 实例 - 本教程";
		Integer visitCount = new Integer(0);
		String visitCountKey = new String("visitCount");
		String userIDKey = new String("userID");
		String userID = new String("w3big");
	
		// 检查网页上是否有新的访问者
		if (session.isNew()){
			title = "Servlet Session 实例 - 本教程";
		 	session.setAttribute(userIDKey, userID);
		} else {
		 	visitCount = (Integer)session.getAttribute(visitCountKey);
		 	visitCount = visitCount + 1;
		 	userID = (String)session.getAttribute(userIDKey);
		}
		session.setAttribute(visitCountKey,  visitCount);
	
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
	
		String docType = "<!DOCTYPE html>\n";
		out.println(docType +
		        "<html>\n" +
		        "<head><title>" + title + "</title></head>\n" +
		        "<body bgcolor=\"#f0f0f0\">\n" +
		        "<h1 align=\"center\">" + title + "</h1>\n" +
		         "<h2 align=\"center\">Session 信息</h2>\n" +
		        "<table border=\"1\" align=\"center\">\n" +
		        "<tr bgcolor=\"#949494\">\n" +
		        "  <th>Session 信息</th><th>值</th></tr>\n" +
		        "<tr>\n" +
		        "  <td>id</td>\n" +
		        "  <td>" + session.getId() + "</td></tr>\n" +
		        "<tr>\n" +
		        "  <td>创建时间</td>\n" +
		        "  <td>" +  df.format(createTime) + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>最后访问时间</td>\n" +
		        "  <td>" + df.format(lastAccessTime) + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>用户 ID</td>\n" +
		        "  <td>" + userID + 
		        "  </td></tr>\n" +
		        "<tr>\n" +
		        "  <td>访问统计:</td>\n" +
		        "  <td>" + visitCount + "</td></tr>\n" +
		        "</table>\n" +
		        "</body></html>"); 
	}
}

Compilar oServlet SessionTrack anterior, e criar a entrada apropriada no arquivo web.xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet> 
    <!-- 类名 -->  
    <servlet-name>SessionTrack</servlet-name>
    <!-- 所在的包 -->
    <servlet-class>com.w3big.test.SessionTrack</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SessionTrack</servlet-name>
    <!-- 访问的网址 -->
    <url-pattern>/TomcatTest/SessionTrack</url-pattern>
  </servlet-mapping>
</web-app>

Na barra de endereços do navegador, digitehttp: // localhost: 8080 / TomcatTest/ SessionTrack, quando você executar a apresentação os seguintes resultados:

Tente executar o mesmo Servlet novamente, ele irá mostrar os seguintes resultados:


Excluir os dados da sessão Session

Quando tiver terminado de dados de sessão do usuário da sessão, você tem as seguintes opções:

  • Remover um atributo específico: Você pode chamar o métodoremoveAttribute public void (String nome)para remover um valor específico associado com uma chave.
  • Apagar toda a sessão sessão: Você pode chamar o métodoinvalidate public void ()para descartar toda a sessão sessão.
  • Sessão definir sessão de tempo de validade: Você pode chamar o métodopublic void setMaxInactiveInterval (intervalo de int)para configurar um tempo limite da sessão sessão separada.
  • Usuários Sair: Se vocêestiver usando um servidor servlet 2.4 suportado, você pode chamar oLogoutpara sair do cliente do servidor Web, e todos os usuários pertencentes a todas as sessões sessão como inválido.
  • configuração web.xml: Se você estiver usando Tomcat, além dos métodos acima, você pode configurar o tempo limite da sessão sessão no arquivo web.xml, como segue:
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

Exemplos do tempo acima-out é minutos, Tomcat irá substituir o padrão de 30 minutos de tempo limite.

getMaxInactiveInterval em um Servlet no método () retorna a sessão de tempo limite da sessão, em segundos. Então, se tempo limite da sessão configurado no tempo da sessão web.xml de 15 minutos, depois getMaxInactiveInterval () retornará 900.