Latest web development tutorials

Sesión JSP

HTTP es un protocolo sin estado, lo que significa que cada vez que un cliente recupera páginas, debe abrir una conexión independiente del servidor, el servidor no registra el cliente anterior solicita cualquier información.

Hay tres maneras de mantener las sesiones de cliente y de servidor:


galletas

servidor de red puede asignar un identificador de sesión único como una galleta para representar a cada cliente para identificar la próxima solicitud del cliente.

Esto puede no ser una manera eficiente, ya que muchas veces no es necesariamente compatible con la cookie del navegador, por lo que no recomendamos el uso de este método para mantener la sesión.


campos de formulario ocultos

Un servidor web puede enviar a escondidas campos de formulario HTML y un identificador de sesión único, como este:

<input type="hidden" name="sessionid" value="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 envía una solicitud, el valor session_id se puede utilizar para guardar diferentes trayectoria del navegador.

Este enfoque puede ser una manera eficaz, pero no produce un evento de formulario de presentación Haga clic <A HREF> pestaña hipervínculo y, por lo tanto, los campos de formulario ocultos no son compatibles con el seguimiento de sesión genérica.


la reescritura de URL

Se pueden añadir algunos datos adicionales detrás de cada URL para distinguir la sesión, según se puede asociar identificador de sesión del servidor de datos.

Por ejemplo, http: //w3cschool.cc/file.htm; sessionid = 12345, identificador de sesión sessionid = 12345, el servidor puede utilizar estos datos para identificar al cliente.

Por el contrario, la reescritura de URL es una mejor manera, incluso si el navegador no soporta cookies también puede funcionar, pero el inconveniente es que se debe especificar un ID de sesión para cada URL dinámica, incluso si se trata de una simple página HTML.


objetos de sesión

Además de los varios métodos anteriores fuera, JSP interfaz servlet HttpSession proporciona el uso para identificar a un usuario, para almacenar todo el acceso del usuario a la información.

De forma predeterminada, JSP permite el seguimiento de la sesión, un nuevo objeto HttpSession automáticamente para el nuevo cliente crea una instancia. seguimiento de sesión prohibición necesita para convertir explícitamente fuera a la sesión de valor de atributo directiva de página a falso para conseguir, de la siguiente manera:

<%@ page session="false" %>

motor JSP objeto de sesión implícito está expuesto al desarrollador. Al proporcionar un objeto de sesión, los desarrolladores pueden fácilmente almacenar o recuperar datos.

La siguiente tabla muestra algunos de los objeto de sesión maneras importantes:

SN Método y Descripción
1 getAttribute Objeto pública (String name)

El objeto devuelto sesión de objeto unido con el nombre especificado, o null si no existe ninguno
2 getAttributeNames Enumeración pública ()

Devuelve el objeto de sesión todos los nombres de objetos
3 getCreationTime larga público ()

Devuelve se crea el objeto de sesión de tiempo, en milisegundos, del 1 de enero 1970, la fecha de la madrugada
4 Cadena getId pública ()

Devuelve el identificador de objeto de sesión
5 getLastAccessedTime larga público ()

Devuelve la última vez que el cliente visitó, en milisegundos, del 1 de enero 1970, la fecha de la madrugada
6 public int getMaxInactiveInterval ()

Devuelve el intervalo de tiempo máximo, en segundos, contenedor de servlets mantendrá la sesión abierta en este momento
7 public void invalidate ()

La invalidación de sesiones, la desagregación cualquier objeto vinculado a la sesión
8 public boolean isNew (

Devuelve si un nuevo cliente, o si el cliente se negó a unirse a la sesión
9 pública removeAttribute void (String name)

Retire el nombre del objeto de sesión especificado
10 pública setAttribute void (String nombre, de objetos de valor)

Para producir un objeto con el nombre y el valor especificado y con destino a la sesión
11 pública setMaxInactiveInterval vacío (intervalo int)

Para especificar el tiempo, en segundos, contenedor de servlets mantendrá la sesión válida durante este periodo

Aplicación Sesión JSP

En este ejemplo se describe cómo utilizar el objeto HttpSession obtener el tiempo de creación y la hora del último acceso. Vamos a ser un nuevo objeto de sesión para el objeto de la solicitud correspondiente, si este objeto no existe.

<%@ 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>

Trate de acceso http: // localhost: 8080 / testjsp / main.jsp, primera carrera obtendrá los siguientes resultados:

Visita de nuevo, vamos a obtener los siguientes resultados:


Borrar datos de sesión

Cuando terminado de procesar los datos de sesión de un usuario, dispone de las siguientes opciones:

  • Eliminar una propiedad específica:

    Llamar al método public void removeAttribute (String name) para eliminar la propiedad especificada.

  • Para eliminar una conversación completa:

    Llamar al método public void invalidate () para hacer que toda la sesión no es válida.

  • Ajuste de Duración de la sesión:

    Llamar al método public void setMaxInactiveInterval (intervalo int) para establecer el tiempo de espera de sesión.

  • Firma del usuario:

    Servlet2.4 versiones soportadas del servidor, el método de cierre de sesión () Usted puede llamar a la sesión del usuario y toda sesión asociada no es válido.

  • archivo de configuración web.xml:

    Si está utilizando Tomcat, puede configurar el archivo web.xml a lo siguiente:

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

Tiempo de espera en minutos, Tomcat tiempo de espera predeterminado es de 30 minutos.

Servlet en el método getMaxInactiveInterval () devuelve los segundos de tiempo de espera. Si el web.xml se configura durante 15 minutos, a continuación, getMaxInactiveInterval método () devolverá 900.