Introducción de sesión de sesión
Una sesión se refiere al proceso de interacción entre un usuario que utiliza el mismo proceso de navegador y una aplicación web durante un período de tiempo.
Las sesiones generalmente se usan para rastrear el estado del usuario y almacenando en caché la información del usuario en este proceso de navegador.
Cuando el usuario cierra el navegador, la sesión anterior no se puede obtener nuevamente (el caso donde el maxage de la cookie es -1). Abra un nuevo navegador nuevamente y comenzará una nueva sesión.
clase javax.servlet.http.httpsession. Cada httpsession representa una sesión del usuario.
El tiempo de vencimiento de cada sesión es de 30 minutos de forma predeterminada.
Cuando el navegador accede por primera vez al servidor, sin importar qué página visita primero, el servidor asignará un identificador de sesión único al usuario, es decir, JSesionID y luego le devolverá al usuario en forma de cookie.
La siguiente figura es un encabezado de respuesta (la siguiente figura se basa en Servlet 3.0, y no hay un atributo httponly en Servlet 2.5)
El servidor crea una sesión para cada usuario, a saber, el objeto Httpsession y la guarda en el lado del servidor.
Entonces, cuando el usuario accede nuevamente al servidor, ¿cómo sabe el servidor o el usuario actual?
Cuando el navegador accede nuevamente al servidor, llevará una cookie que contenga JSesionID para acceder al servidor. El servidor devuelve el objeto Httpsession de este usuario en función de esta ID y mantiene la sesión.
(Entonces, ¿es posible implementar la misma sesión en diferentes navegadores?
Aquí hay una URL típica, que tiene un cierto efecto de falsificación y puede implementar la misma sesión en diferentes navegadores:
http: // localhost: 8080/day07_2/cncookieservlet; jSessionID = f8692d61cd46d094dbb7a8fc7387649c)
La relación entre el navegador y el servidor es la siguiente:
Httpsession:
En un servlet, el objeto de sesión se obtiene a través del método httpservletrequest.getSession.
Los siguientes métodos de la interfaz httpsession se utilizan para compartir datos a toda la sesión:
getAttribute ("name") setAttribute ("name", objeto); getAtTributenames () removeAttribute ("name")Invalidar(); - Este método elimina fuertemente la sesión en caché del servidor.
Ejemplo:
SetAttribute en la httpsession de un servlet.
Vaya a otro servlet a través de HyperConnect, o de otra manera y muestre la información a través de GetAttribute.
Llame a getAttribute en cualquier servlet para mostrar información.
Cierre este navegador y vuelva a visitar el servlet que obtiene información, y encontrará que ya no hay información.
como sigue:
Name de cadena = request.getParameter ("nombre"); request.setAttribute ("nombre", "solicitud ---"+nombre); request.getSession (). SetAttribute ("Nombre", "Sesión ---"+Nombre); getServletContext (). setAttribute ("name", "aplicación ---"+nombre); El identificador único de la sesión:
Cada sesión tiene un identificador único, a saber, una identificación.
Cuando el navegador obtiene una nueva sesión, el usuario puede imprimir el valor de ID a través de session.geid ().
Sin cerrar el navegador, saltando en varias páginas, usando la misma sesión.
como:
request.getSession (). getId ()
¿Qué es la salida segura?
Cuando un usuario sale, debe eliminar su información de la sesión, es decir, salir de forma segura.
La salida segura es borrar la información que deja en el servidor para evitar que se piratee.
Session.Invalidate ();
1. Request.getSession (). Invalidate ();
Esto permite eliminar los objetos correspondientes en el grupo de sesión.
2. Session.RemoveAttribute (...)
como:
request.getSession (). RemoveAttribute ("RealCode");
Se utiliza para eliminar los atributos en los objetos de sesión
Rastree la sesión reescribiendo la URL:
Como se mencionó anteriormente, el contenedor de servlet primero guarda un SessionID en el cliente. Más tarde, cuando el navegador emite una solicitud HTTP, contendrá esta sesión de sesión. El contenedor de servlet lee el SessionID en la solicitud HTTP y elimina el objeto HTTPSSIONSion del contenedor en función de este SessionID para facilitar el seguimiento a qué sesión pertenece la solicitud HTTP. Este proceso se llama seguimiento de la sesión.
Si el navegador admite cookies, el contenedor de servlet guarda el SessionID como una cookie en el cliente del navegador. Pero si el usuario deshabilita las cookies por razones de seguridad, ¿cómo puede el contenedor de servlet rastrear la sesión?
Primero, deshabilitemos las cookies en IE (nota: no funciona para algunos sistemas fantasmas).
IE> Herramientas> Opciones de Internet> Privacidad> Avanzado y luego deshabilitar las cookies:
Podemos agregar tal hipervínculo a la página de inicio: (pongo el código relacionado con saveServlet.java getServlet.java logroutservlet.java logroutservlet.java en el siguiente código)
<h2> Demuestre la tecnología de URL de reescritura ---- descifrar el problema de que nuestra sesión no es válida después de que el usuario desactiva las cookies </h2> <form de acción = "< %= respuesta.encodeurl (" saveServlet ") %>" método = "post"> nombre: <input type = "text" name = "name"/> <BR/> <input type = "Subsit"/> <//<a a a a que tipo = "text" nombre = "nombre"/> <BR/> <type de entrada = "Subsit"/> </</<a A inpiet = "Text" Name = "Nombre"/> <BR/> <Incript Type = "Subsit"/> </</<a A inpiet = "Text" Nombre = "Nombre"/> <BR/> <Incript Tipo = "Sentir"/> </</<a Aum href = "< %= respuesta.encodeurl (" getservlet ") %>"> Reescribir datos de URL-lee en varios contenedores </a> <br/> <a href = "< %= Response.EncodeUrl (" logroutServlet ") %>"> Reescribir la salida de url-safe </a>Esta oración <form de acción = "<%= respuesta.encodeurl ("/aa ")%>"> puede darse cuenta de esta función
Después de deshabilitar las cookies aquí, el navegador aún puede recibir cookies enviadas por el servidor, pero el navegador solo puede aceptarlas y no puede enviarlas al servidor. Si las cookies no se pueden enviar, no puede ir al grupo de sesión para obtener el objeto correspondiente.
Después de ingresar el valor deseado en el formulario, vaya al hipervínculo en el GetServlet a continuación para ver si aún se puede mostrar el valor de entrada. La respuesta es sí. La ruta de acceso aquí es similar
http: // localhost: 8080/day07_2/cncookieservlet; jsessionID = f8692d61cd46d094dbb7a8fc7387649c, el JSessionID = f8692d61cd46d094dbb7a8fc733876449c detrás de It. De esta manera, puede acceder a ella ingresando esta URL en otro navegador.
Aquí quiero agregar: (La siguiente situación es que cuando escribo el objeto de httpsession en el grupo de sesiones, el valor y el valor de JSesionID de la sesión correspondiente en la cookie. Esta cookie sobrescribirá la que crea el sistema, que es equivalente a ser creado por mí mismo. Establecí el tiempo de existencia en diez minutos. Si no está cubierto, el cookie morirá cuando el browser esté cerrado, y el siguiente Phenomenon no ocurra).
En los dos casos, si las cookies están deshabilitadas, las ID de los objetos recién creados en el grupo de sesión son diferentes. Es decir, si ingresa un valor de un nombre en el formulario cuando las cookies están deshabilitadas, el resultado de la consulta es el siguiente:
Y JSessionID es 2BB51EBDeaAF14D19656C71E1B6F9FF6
Luego cambie inmediatamente al modo de cookie sin deshabilitarlo, ingrese otro nombre como Tom, y el resultado de la consulta será naturalmente Tom, y JSesionID es
203F9E4DB5D874476B81DAF350661B6A, que es diferente de deshabilitar, lo que hace que aparezcan los siguientes resultados.
Luego, en este momento, cerramos el navegador, ingresamos nuevamente al navegador y vemos los resultados de acceso sin deshabilitar el modo de cookie, de la siguiente manera:
Publicaré el código principal a continuación:
Saveservlet.java
paquete cn.hncu.servlets.session; import java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; Public Class SaveServlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {dopost (request, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Html; Charset = UTF-8"); PrintWriter out = Response.getWriter (); request.setcharacterEncoding ("UTF-8"); Name de cadena = request.getParameter ("nombre"); request.setAttribute ("nombre", "solicitud ---"+nombre); request.getSession (). SetAttribute ("Nombre", "Sesión ---"+Nombre); getServletContext (). setAttribute ("name", "aplicación ---"+nombre); // Un ejemplo de combinación de tecnología de cookies y tecnología de sesión para la aplicación -※ Función: después de cerrar el navegador, si el usuario puede iniciar sesión en este sitio dentro de los 10 minutos, también puede acceder a la información en la sesión // escribir una cookie con una clave "JSessionID" y valor como SessionId para el cliente. Cookie C = nueva cookie ("JSessionID", request.getSession (). GetId ()); c.setMaxage (60*10); // El fenómeno anterior es causado por esta oración. Sin esta oración, no habrá tal fenómeno como se mencionó anteriormente C.SetPath (request.getContextPath ()); Respuesta.AddCookie (C); out.println ("Guardar con éxito ..."); out.flush (); out.close (); }}GetServlet.java
paquete cn.hncu.servlets.session; import java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; La clase pública getServlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Html; Charset = UTF-8"); PrintWriter out = Response.getWriter (); out.println ("<! DocType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<Ethead> <title> un servlet </title> </head>"); out.println ("<body>"); String reqname = (string) request.getAttribute ("name"); String sename = (string) request.getSession (). GetAttribute ("nombre"); String appname = (string) getServletContext (). GetAttribute ("nombre"); out.println (reqname+"<br/>"); out.println (sename+"<br/>"); out.println (appname+"<br/>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}Logoutservlet.java
paquete cn.hncu.servlets.session; import java.io.ioException; import java.io.printwriter; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; Public Class logroutServlet extiende httpservlet {public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {Response.SetContentType ("Text/Html; Charset = Utf-8"); PrintWriter out = Response.getWriter (); // Salida segura --- siempre que el objeto de sesión sea inválido request.getSession (). Invalidate (); out.println ("Salida segura ..."); }}Lo anterior es la Gestión de la Sesión Javaweb presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje. ¡El editor le responderá a tiempo!