Tecnología JAVAWEB-Session Cookie & Session, uso específico de Cookie & Session, obtención del objeto Session, ciclo de vida de la sesión

1. Introducción a la tecnología de conversación

1. Almacenar el estado del cliente

En nuestro sistema de compras en el sitio web, ¿dónde almacena el usuario la información del producto comprado? Debido a que el protocolo Http no tiene estado, es decir, cuando cada cliente accede a los recursos del lado del servidor, el servidor no sabe quién es el cliente, por lo que se necesita tecnología de sesión para identificar el estado del cliente. La tecnología de conversación esAyudar al servidor a recordar el estado del cliente (distinguir al cliente)

2. Tecnología de conversación

Todo el proceso, desde abrir un navegador en un sitio determinado hasta cerrar el navegador, se convierte en una sesión. La tecnología de la sesión es registrar el estado y los datos del cliente en esta sesión.
La tecnología de conversación se divide en Cookiey Session:

  • Cookie: Los datos se almacenan localmente en el cliente, lo que reduce la presión de almacenamiento en el servidor. La seguridad no es buena y el cliente puede borrar las cookies.
  • Session: Almacene datos en el lado del servidor, con una seguridad relativamente buena, aumentando la presión sobre el servidor.

2. Tecnología de cookies

Por ejemplo, estamos visitando el
Inserte la descripción de la imagen aquí
sitio web de Taobao: el gráfico indica que cuando usamos el navegador para visitar el sitio web de compras y agregamos cosas al carrito de compras, la información del producto se colocará en el navegador. Cuando cerramos el navegador y lo visitamos nuevamente, los artículos en el carrito de compras todavía se muestran.

La tecnología de cookies es una tecnología que almacena datos del usuario sobre el cliente, nos dividimos en dos aspectos para aprender:

Primero, ¿cómo envía el servidor una cookie al cliente?
En segundo lugar, ¿cómo acepta el servidor la cookie transportada por el cliente?

Lleve a los siguientes dos puntos principales:

Tres, el servidor envía una cookie al cliente.

1. Crear cookie:

  • Cookie cookie = new Cookie(String cookieName,String cookieValue);

P.ej:

Cookie cookie = new Cookie("username""zhangsan");

Luego, la cookie se enviará al cliente en forma de un encabezado de respuesta:
Inserte la descripción de la imagen aquí

Nota: el chino no se puede almacenar en cookies

2. Configure el tiempo de persistencia de Cookie en el cliente:

  • cookie.setMaxAge(int seconds); El tiempo entre paréntesis aquí

P.ej:

cookie.setMaxAge(10*60);

Configure la información de las cookies para que se almacene en el archivo de disco del navegador durante 10 minutos, y el navegador eliminará automáticamente la información de las cookies después de la expiración.

Nota: Si no se establece el tiempo de persistencia, la cookie se almacenará en la memoria del navegador y el navegador cerrará la destrucción de la información de la cookie (cookie de nivel de sesión). Si se establece el tiempo de persistencia, la información de la cookie se conservará en el navegador de acuerdo con el período de tiempo. En el archivo de disco.

3. Configure la ruta de transporte de cookies:

  • cookie.setPath(String path);
    Nota: Si la ruta de transporte no está configurada, entonces la información de la cookie llevará la información de la cookie en la ruta donde se accede al recurso web que generó la cookie.

P.ej:

cookie.setPath("/WEB16");

Representa el acceso a cualquier recurso en la aplicación WEB16 con cookies

cookie.setPath("/WEB16/cookieServlet");

La información de las cookies solo se lleva cuando el representante visita el cookieServlet en WEB16

4. Enviar cookies al cliente:

  • response.addCookie(Cookie cookie);

5. Eliminar la cookie del cliente:

Si desea eliminar la información de cookies almacenada del cliente, entoncesSobrescribir con una cookie con el mismo nombre y ruta con un tiempo de persistencia de 0lata

Caso completo uno:

@WebServlet(name = "SendCookieServlet",urlPatterns ="/SendCookieServlet")
public class SendCookieServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1.创建Cookie对象
        Cookie cookie = new Cookie("name","zhangsan");
        //1.1 为Cookie设置持久化时间---Cookie信息在硬盘上保存的时间
        cookie.setMaxAge(60*10);//10分钟,时间设置为0代表删除该Cookie
        //1.2为Cookie设置携带路径
        cookie.setPath("/SendCookieServlet");//访问SendCookieServlet资源才携带Cookie
        cookie.setPath("/WEB16");//访问WEB16下的任何资源是都携带这个Cookie
        cookie.setPath("/");//访问服务器下的所有资源携带的Cookie
        //2.发送Cookie中存储的信息发的送到客户端====以响应头的形式
        response.addCookie(cookie);
    }
}

Caso completo dos:

(Eliminar cookie)

@WebServlet(name = "RemoveCookieServlet",urlPatterns =
"/RemoveCookieServlet")
public class RemoveCookieServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            //删除客户端保存name=zhangsan的cookie信息
        Cookie cookie = new Cookie("name","");
            //将path设置成与要删除cookie的path一致
            cookie.setPath("/WEB16");
            //设置时间为0
            cookie.setMaxAge(0);
            response.addCookie(cookie);
    }
}

Pasos de uso: Si visitamos "/ SendCookieServlet" en este momento, entonces el nombre = zhangsan se almacenará en la Cookie, y luego cuando visitemos "/ RemoveCookieServlet", borraremos su caché, simplemente establezca su MaxAge = 0. Visitamos index.jsp y no encontraremos cookies.

4. ¿Cómo acepta el servidor las cookies transportadas por el cliente?

La información de las cookies se envía al servidor en forma de un encabezado de solicitud. Entonces, los pasos para que nuestro servidor acepte cookies:

  • El primer paso: obtener todas las cookies mediante solicitud:
Cookie[] cookies = request.getCookies();
  • Paso 2: atraviesa la matriz de cookies y obtén la cookie que queremos por el nombre de la cookie
for(Cookie cookie : cookies){
    
    
if(cookie.getName().equal(cookieName)){
    
    
String cookieValue = cookie.getValue();
}
}

Caso:

@WebServlet(name = "GetCookieServlet",urlPatterns =
"/GetCookieServlet")
public class GetCookieServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取客户端携带的cookie的数据
         Cookie cookies[] = request.getCookies();
         //通过cookie名称获取想要的Cookie
        for (Cookie cookie :cookies){
    
    
            //获得cookie的名称
            String cookieName = cookie.getName();
            if (cookieName.equals("name")){
    
    
                String cookieValue = cookie.getValue();
                System.out.println(cookieValue);
            }
        }
    }

Cinco, tecnología de sesión

La tecnología de sesión es una tecnología que almacena datos en el lado del servidor. Crea un espacio de memoria para que cada cliente almacene los datos del cliente, pero el cliente necesita llevar una identificación de identificación cada vez para encontrar su propio espacio de memoria en el servidor. entoncesLa implementación de Session se basa en CookieLa sesión necesita almacenar la identificación única del cliente JSESSIONID con la ayuda de Cookie
Inserte la descripción de la imagen aquí
En Session, necesitamos aprender las siguientes tres preguntas:

¿Cómo obtener el objeto de sesión (área de memoria) que pertenece a este cliente?

¿Cómo acceder a los datos de la sesión (la sesión también es un objeto de dominio)?

¿El ciclo de vida del objeto de sesión?

1. Obtener el objeto Session

  • HttpSession session = request.getSession()
    Este método obtendrá el objeto Session dedicado a la sesión actual. Si el servidor no tiene un objeto Session para la sesión, se creará y devolverá una nueva Session. Si ya hay una Session perteneciente a la sesión, la Session existente se devolverá directamente (la esencia esSegún JSESSIONID, determine si el cliente ya tiene una sesión en el servidor

Caso número uno:

@WebServlet(name = "SessionServlet1",urlPatterns ="/SessionServlet1")
public class SessionServlet1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
   //创建属于该客户端(会话)的私有的session区域
   /*request.getSession()方法内部会判断 该客户端是否在服务器端已经存在session
 如果该客户端在此服务器不存在session,那么就会创建一个新的session对象
 如果该客户端在此服务器已经存在session 获得已经存在的session并返回*/
    HttpSession httpSession =  request.getSession();
    String id = httpSession.getId();//该session对象的编号id
       response.getWriter().write("JSESSIONID:"+id);
            System.out.println(id);
     }
}

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

2. Cómo acceder a los datos de la sesión (la sesión también es un objeto de dominio)

La sesión también es un objeto regional para almacenar datos, por lo que el objeto de sesión también tiene los siguientes tres métodos:

  • session.setAttribute(String name,Object obj)
  • session.getAttribute(String name)
  • session.removeAttribute(String name)

Caso 2:

Paso 1: crear un objeto SessionServlet1

@WebServlet(name = "SessionServlet1",urlPatterns =
"/SessionServlet1")
public class SessionServlet1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
  HttpSession httpSession =  request.getSession();
  httpSession.setAttribute("name","yjw");
  String id = httpSession.getId();//该session对象的编号id
         response.getWriter().write("JSESSIONID:"+id);
            System.out.println(id);
        }
}

Paso 2: crear un SessionServlet2

@WebServlet(name = "SessionServlet2",urlPatterns = "/SessionServlet2")
public class SessionServlet2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //从session中获得存储数据
         HttpSession httpSession = request.getSession();
         String attribute =(String)httpSession.getAttribute("name");
         response.getWriter().write(attribute);
    }
}

El efecto es el siguiente:
Inserte la descripción de la imagen aquí

3. El ciclo de vida del objeto Session (preguntas de la entrevista / preguntas de la prueba escrita)

El ciclo de vida del objeto Session

  • Crear: creado cuando request.getSession () se ejecuta por primera vez
  • destruir:
  1. Cuando el servidor (anormalmente) se apaga
  2. Sesión caducada / inválida (30 minutos por defecto)
    Nota: El punto de partida del tiempo es de 30 minutos desde que no se operan los recursos del lado del servidor y se puede configurar en el web.xml del proyecto.

como sigue:

<session-config>
        <session-timeout>60</session-timeout>
</session-config>
  1. Destruye manualmente la sesión
  • session.invalidate()

Alcance de la sesión: el
valor predeterminado es en una sesión, es decir, cualquier recurso en una sesión comparte un objeto de sesión

Pregunta de la entrevista: ¿Cuando se cierra el navegador, se destruye la sesión? —— El
navegador incorrecto está en el nivel del cliente, mientras que la sesión está en el nivel del servidor

4. La persistencia de JSESSIONID

Pensamiento: La Sesión configurada automáticamente por el primer Servlet que se visitará, en forma de Cookie, cambia la duración del acceso a setMaxAge () en el lado del cliente. Para darse cuenta de la persistencia de JSESSIONID.

@WebServlet(name = "SessionServlet1",urlPatterns =
"/SessionServlet1")
public class SessionServlet1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
HttpSession httpSession =  request.getSession();
String id = httpSession.getId();//该session对象的编号id
//手动创建一个存储JSESSIONID的Cookie为该Cookie设置持久化时间
 Cookie cookie = new Cookie("JSESSIONID",id);
        cookie.setPath("/WEB16");
        cookie.setMaxAge(60*10);//自行设置时间
        response.addCookie(cookie);         
        response.getWriter().write("JSESSIONID:"+id);
           System.out.println(id);
       }
}

Supongo que te gusta

Origin blog.csdn.net/Mr_GYF/article/details/109169158
Recomendado
Clasificación