Latest web development tutorials

Seguimiento de sesión servlet

HTTP es un protocolo "sin", lo que significa que cada vez que el cliente recupera las páginas, el cliente abre una conexión separada al servidor Web, el servidor no registra automáticamente antes de que se reservan las solicitudes de los clientes.

Pero todavía hay tres maneras de mantener una conversación sesión entre el cliente Web y el servidor Web:

galletas

Un servidor de Web se le puede asignar un identificador de sesión único como la sesión para cada cookie de cliente Web, las solicitudes posteriores para el cliente se pueden usar para identificar la cookie recibido.

Esto puede no ser un método eficaz, debido a que muchos navegadores no soportan cookies, por lo que no recomendamos el uso de esta forma de mantener la sesión de la sesión.

campos de formulario ocultos

Un servidor web puede enviar a escondidas campos de formulario HTML, así como una identificación única sesión de la sesión, de la siguiente manera:

<Input type = "hidden" name = "sessionid" = "12345">

Esta entrada significa que cuando se envía el formulario, el nombre y el valor especificado se incluyen automáticamente en los datos GET o POST. Cada vez que el navegador Web envía de nuevo la solicitud, el valor session_id puede ser utilizado para mantener el seguimiento de diferente navegador Web.

Esto puede ser una forma efectiva de mantener el seguimiento de sesión sesión, pero haga clic en el enlace de hipertexto convencional (<A HREF...>) no da lugar a un envío del formulario, por lo que los campos de formulario ocultos no son compatibles con regularidad el seguimiento de sesión sesión.

Reescritura de URL

Se puede añadir algunos datos adicionales en cada extremo de la URL para identificar la sesión identificador de sesión de sesión de sesión y los datos de la sesión almacenados sobre el servidor de sesión asociado hará.

Por ejemplo, http: //w3cschool.cc/file.htm; sessionid = 12345, identificador de sesión de sesión se adjunta como sessionid = 12345, un identificador se puede acceder al servidor Web para identificar al cliente.

la reescritura de URL es una mejor manera de mantener la sesión de la sesión, que puede funcionar muy bien cuando el navegador no soporta cookies, pero su inconveniente se genera dinámicamente para cada URL para asignar un identificador de sesión para la sesión de la página, incluso si es muy sencillo de páginas HTML estáticas serán, también.

objetos HttpSession

Además de las tres formas anteriores, Servlet también proporciona la interfaz HttpSession, que proporciona al usuario para identificar y almacenar información sobre el usuario cuando una solicitud de más de una página cruz o visite manera.

contenedor de servlets para utilizar esta interfaz para crear una conversación sesión entre un cliente HTTP y el servidor HTTP. Sesión dura un período determinado de tiempo, a través de múltiples peticiones de página o conexiones.

Se llega a obtener HttpSession objeto llamando al método Pública HttpServletRequestgetSession (), de la siguiente manera:

HttpSession session = request.getSession ();

Es necesario antes de enviar cualquier contenido del documento para el cliente llama arequest.getSession ().A continuación se presenta un resumen de varios objetos HttpSession métodos importantes se encuentran:

序号方法 & 描述
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 会话无效之前,指定客户端请求之间的时间,以秒为单位。

Ejemplos seguimiento de sesión

Este ejemplo muestra cómo utilizar el objeto HttpSession obtener sesión de sesión de hora de creación y la hora del último acceso. Si no hay ninguna sesión de la sesión, vamos a crear una nueva sesión de solicitudes de sesión.

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 elservlet anterior SessionTrack, y crear la entrada correspondiente en el archivo 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>

En la barra de direcciones del navegador, escribahttp: // localhost: 8080 / TomcatTest/ SessionTrack, cuando se ejecuta por primera vez el espectáculo los siguientes resultados:

Trate de ejecutar el mismo servlet de nuevo, se mostrará los siguientes resultados:


Borrar datos de la sesión Sesión

Cuando haya terminado de datos de la sesión de sesión de usuario, dispone de las siguientes opciones:

  • Eliminar un atributo específico: Se puede llamar al métodopúblico removeAttribute void (String nombre)para eliminar un valor específico asociado a una clave.
  • Eliminar toda la sesión de la sesión: Se puede llamar al métodopúblico invalida void ()para descartar toda la sesión de la sesión.
  • Sesión establecer sesión de tiempo de caducidad: Usted puede llamar al métodopublic void setMaxInactiveInterval (intervalo int)para establecer un tiempo de espera de sesión de sesión independiente.
  • Los usuarios de cierre de sesión: Si está utilizando un servidor de servlets 2.4 compatible, puede llamar al cierre de sesiónpara cerrar la sesión de cliente de servidor Web, y todos los usuarios que pertenecen a toda la sesión de la sesión como no válido.
  • configuración web.xml: Si está utilizando Tomcat, además de los métodos anteriores, se puede configurar el tiempo de espera de sesión de la sesión en el archivo web.xml, de la siguiente manera:
  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

Ejemplos del tiempo por encima de salida es minutos, Tomcat anulará el valor por defecto de 30 minutos de tiempo de espera.

getMaxInactiveInterval en un servlet en el método () devuelve la sesión de la sesión de tiempo de espera, en segundos. Por lo tanto, si se configura el tiempo de espera de sesión en el tiempo de la sesión web.xml de 15 minutos, a continuación, getMaxInactiveInterval () devolverá 900.