javaweb-Cookie y Session-35

Cambiar la plantilla de código de idea

Inserte la descripción de la imagen aquí

Tecnología conversacional

1. 会话:一次会话中包含多次请求和响应。
	* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2. 功能:在一次会话的范围内的多次请求间,共享数据
3. 方式:
	1. 客户端会话技术:Cookie
	2. 服务器端会话技术:Session

Galleta:

1. 概念:客户端会话技术,将数据保存到客户端

2. 快速入门:
3. 实现过程:客户端申请,服务器响应,数据存储在本地,下次访问将存储在本地的数据一并发送过去,实现多次请求响应的数据共享,服务器发送和接收cookie
	* 使用步骤:
		1. 创建Cookie对象,绑定数据
			* new Cookie(String name, String value) 
		2. 发送Cookie对象
			* response.addCookie(Cookie cookie) 
		3. 获取Cookie,拿到数据
			* Cookie[]  request.getCookies()  

Cometí un error al usar super?
Cookie encapsulada

package learn.myweb;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用注解可以更加简便。其中有默认参数,例如loadstarup
@WebServlet("/head_easy")
//可以更加简化,将url省略掉,使用value就可以,进一步value也不用写
public class servlet_test extends HttpServlet {
    
    


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("head_easy类");

        System.out.println("dopost类");
//        获得cookie
        Cookie[] cookies = req.getCookies();
        if(cookies!=null){
    
    
            for(Cookie c:cookies){
    
    
                String cName = c.getName();
                String cValue = c.getValue();
                System.out.println(cName+cValue);
            }
        }
        else{
    
    

   System.out.println("cookie是空的");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("head_easy类");
        System.out.println("doget类");
        this.doPost(req,resp);
    }
}

Interpretar cookies

package learn.myweb;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//使用注解可以更加简便。其中有默认参数,例如loadstarup
@WebServlet("/head_easy")
//可以更加简化,将url省略掉,使用value就可以,进一步value也不用写
public class servlet_test extends HttpServlet {
    
    


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("head_easy类");

        System.out.println("dopost类");
//        获得cookie
        Cookie[] cookies = req.getCookies();
        if(cookies!=null){
    
    
            for(Cookie c:cookies){
    
    
                String cName = c.getName();
                String cValue = c.getValue();
                System.out.println(cName+cValue);
            }
        }
        else{
    
    

   System.out.println("cookie是空的");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("head_easy类");
        System.out.println("doget类");
        this.doPost(req,resp);
    }
}

Si hay un caché en el mismo navegador, estará vacío si no es el mismo
. 3. Principio de implementación
* Basado en la implementación de cookies de encabezado de respuesta y de cookie de encabezado de solicitud
* Sujeto a restricciones de protocolo, los datos se almacenarán localmente cuando se reconozca el encabezado de respuesta y se llevarán en la siguiente transmisión datos,
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Implementar varios proyectos web en un servidor web

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
4. Detalles de las cookies

  1. ¿Se
    pueden enviar varias cookies a la vez? * Sí
    * Puede crear varios objetos Cookie y usar la respuesta para llamar al método addCookie varias veces para enviar cookies.
    2. ¿Cuánto tiempo se almacena la cookie en el navegador?
    1. De forma predeterminada, cuando se cierra el navegador, los datos de la cookie se destruyen, es decir, la cookie existe en la memoria del navegador en este momento y se libera cuando se cierra
    2. Almacenamiento persistente:
    * setMaxAge (int segundos)
    1. Número positivo: establece la cookie Los datos se escriben en un archivo del disco duro. Almacenamiento persistente. Y especifique el tiempo de supervivencia de las cookies, una vez transcurrido el tiempo, el archivo de cookies dejará de ser válido automáticamente. Sigue siendo válido dentro de los 30s posteriores al cierre del navegador, indicando el período de validez del inicio de sesión del sitio web, y es conveniente iniciar sesión después de cerrar la
    cookie.setxxx (0)
    3. Número negativo: el valor predeterminado, en la memoria
    4. Cero: borra la información de la cookie, la cookie no está en la memoria y disco duro, El servidor no puede manipular directamente la información de la computadora del cliente. Al operar la cookie de la computadora del cliente de esta manera, se borrará durante la vida útil de la
    cookie 3. ¿Se puede almacenar la cookie en chino?
    * Antes de Tomcat 8, no es posible almacenar datos chinos directamente en una cookie.
    * Los datos chinos deben transcodificarse, generalmente codificación de URL (% E3)
    * Después de Tomcat 8, las cookies admiten datos chinos. Los caracteres especiales aún no son compatibles, se recomienda utilizar almacenamiento de codificación de URL, análisis de decodificación de URL
    4. ¿Problema de uso de cookies de varios elementos compartidos?
    1. Suponiendo que se implementan varios proyectos web en un servidor Tomcat, ¿se pueden compartir cookies entre estos proyectos web?
    * Las cookies no se pueden compartir de forma predeterminada

     		* setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录。统一服务器的不同项目有共享数据的需求
     			* 如果要共享,则可以将path设置为"/"
    
     	
     	2. 不同的tomcat服务器间cookie共享问题?
     	3. 由于项目过大,分支过多,如果将资源部署在同一服务器上,那么服务器无法支持,因此多台服务器之间也有共享数据需求
     		* setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
     			* setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
    
  2. Las características y funciones de las
    cookies 1. Las cookies almacenan datos en el navegador del cliente, que es fácil de manipular y perder
    . 2. El navegador tiene un límite en el tamaño de una sola cookie (4kb) y también tiene un límite en el número total de cookies bajo el mismo nombre de dominio (20 )
    * Función:
    1. Las cookies se utilizan generalmente para almacenar una pequeña cantidad de datos menos sensibles
    2. Para completar la identificación del cliente por parte del servidor sin iniciar sesión

  3. Caso: Recuerde la hora de la última visita
    1. Requisitos:
    1. Visite un Servlet. Si es la primera visita, se le pedirá: Hola y bienvenido a su primera visita.
    2. Si no es la primera visita, el mensaje: Bienvenido de nuevo, la hora de su última visita es: La cadena de tiempo de visualización se
    realiza mediante el uso de cookies para determinar si existe la cookie con un nombre específico, si existe, se quita el tiempo y se actualiza la hora para mostrar el lema posterior. Si no existe, se creará y se le asignará el tiempo para mostrar el eslogan de bienvenida.
    Pero los caracteres especiales en la cookie, como los espacios no admiten la visualización, deben usar la codificación urlencoder para los caracteres especiales.

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/Test01_01")
public class Test01_01 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        System.out.println("01-01-dopostt");
//        Cookie msg = new Cookie("MSG", "hello");
//        msg.setPath("/");
//        response.addCookie(msg);
//        回复消息有中文,因此加上响应头
        response.setContentType("text/html;charset=utf-8");
//        获得所有的cookie
        Cookie[] cookies = request.getCookies();
        Boolean exit=false;
//        遍历所有的cookie,为什么要判断cookie长度
        if(cookies!=null && cookies.length>0){
    
    
            for(Cookie c:cookies){
    
    
//                如果有特定的cookie名字出现
                if(c.getName().equals("last_time")){
    
    
                    exit=true;
//                    返回上次的登录时间,为什么要使用url与解码,特殊字符?是空格一类
                    String decoded_time = URLDecoder.decode(c.getValue(), "utf-8");
                    response.getWriter().write("<h1>"+"欢迎回来"+decoded_time+"<h1>");
//                    将当前时间值更新进入cookie中
                    Date date = new Date();
//                    重新设定date显示格式,其默认为美国格式
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String formated_date = dateFormat.format(date);
//                    将当前时间编码后存储
                    String encode_date = URLEncoder.encode(formated_date, "utf-8");
                    c.setValue(encode_date);
//                    设置cookie存活时间
                    c.setMaxAge(24*60*60);
                    response.addCookie(c);

                }
                else{
    
    
//                    response.getWriter().write("有cookieda都不符合条件");

                }
//                找到就推出循环

                break;
            }
        }
//        判断需要的文件是否存在,如果不存在就创建

        if(cookies==null || cookies.length==0 || exit==false){
    
    
            //                    将当前时间值更新进入cookie中
            Date date = new Date();
//                    重新设定date显示格式,其默认为美国格式
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年mm月dd日 HH:mm:ss");
            String formated_date = dateFormat.format(date);
//                    将当前时间编码后存储
            String encode_date = URLEncoder.encode(formated_date, "utf-8");
            Cookie c = new Cookie("last_time", encode_date);
//                    设置cookie存活时间
            c.setMaxAge(24*60*60);
            response.addCookie(c);
            response.getWriter().write("您首次登录");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("01-01-doget");
        this.doPost(request, response);
    }
}

JSP: Empezando

1. 概念:
	* Java Server Pages: java服务器端页面
		* 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
		* 用于简化书写,将java与html结合在一起


2. 原理
	* JSP本质上就是一个Servlet

Inserte la descripción de la imagen aquí
Configurado en esta carpeta, el índice bajo el trabajo se convierte en clase, el trabajo almacena la
Inserte la descripción de la imagen aquí
clase interna del archivo de recursos jsp-java-httpJspBase generado en tiempo de ejecución, y el
método de servicio -httpserverlet genera los elementos html básicos y encapsula los elementos de la página para una fácil invocación. Es equivalente a adjuntar un intérprete, por lo que simplifica la escritura
3. JSP script: JSP define la forma del código Java
1. <% code%>: el código java definido, en el método de servicio. Qué se puede definir en el método de servicio, qué se puede definir en el script, definir variables locales y tener un alcance pequeño.
2. <%! Code%>: el código java definido, la posición del miembro de la clase java después de la conversión jsp es un tipo de variable miembro, ¿por qué no escribirlo juntos? No se usa comúnmente, el alcance de la acción es relativamente grande. .
3. <% = Code%>: El código java definido aparecerá en la página. Qué se puede definir en la declaración de salida, qué se puede definir en el script, la declaración de salida de la página.

4. JSP的内置对象:
	* 在jsp页面中不需要获取和创建,可以直接使用的对象,因为这些方法后来解释的时候都会放到service中执行,service中resp,req可以识别这些方法
	* jsp一共有9个内置对象。
	* 今天学习3个:
		* request
		* response
		* out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
			* response.getWriter()和out.write()的区别:
				* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
				* response.getWriter()数据输出永远在out.write()之前,就是response无论定义在哪里,都输出在out之前
				* 因此建议使用out,不至于突然打乱布局,out顺序输出

Truncamiento de código, puede escribir control y mostrar en segmentos
Ventajas: JSP se puede actualizar a tiempo sin reiniciar el servidor

Sesión:

1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
也是域对象,类似context,一次会话
3. 快速入门:
	1. 获取HttpSession对象:
		HttpSession session = request.getSession();
	2. 使用HttpSession对象:
		Object getAttribute(String name)  
		void setAttribute(String name, Object value)
		void removeAttribute(String name)  

4. 原理
	* Session的实现是依赖于Cookie的。
	* 就是服务器创建一个session,指定唯一id,浏览器申请资源的时候将cookieID响应,反馈数据,后来浏览器访问其他资源携带这个cookieID,服务器会根据这个ID找到内部的数据,反馈,安全性高,内存消耗
  1. Detalles:
    1. Cuando el cliente está cerrado, el servidor no se cierra, ¿se obtiene la misma sesión dos veces?
    * por defecto. No es. Cuando finaliza la sesión, puede imprimir la sesión y se imprimirá la identificación, diferente
    *
    * Si necesita lo mismo, puede crear una Cookie, la clave es JSESSIONID, establecer el tiempo máximo de supervivencia y hacer que la cookie sea persistente.
    Cookie c = nueva Cookie ("JSESSIONID", session.getId ());
    c.setMaxAge (60 * 60);
    response.addCookie ©;

     2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
     	* 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作,比如用户购物期间服务器重启,应当保证之前用户的数据不丢失,便于接下来的操作
     		* session的钝化:
     			* 在服务器正常关闭之前,将session对象系列化到硬盘上
     		* session的活化:
     			* 在服务器启动后,将session文件转化为内存中的session对象即可。
     		idea不活化,原因?钝化成功,将session.ser存储但是活化失败,因为当项目重启后,会将work目录删掉,导致之前的钝化无用,无法恢复数据
     		先找到本地项目-out目录(部署的项目,打包war)-找到tomcat目录下webapps,放入识别,开启(被解压)-
     		服务器开启,访问-需要是打包的名字+资源名代表实际路径,不再是虚拟路径
     		同tocmat目录下work目录运行时动态资源,比如jsp-java,session被序列化的文件也存储,这里服务器正常关闭后会将文件放入目录内,session.ser,当下次开启服务器,会自动读取session.ser,方便。
     		未来开发不在idea中部署,而是扔到webapps中居多,保证了钝化的work不会被轻易删除
     3. session什么时候被销毁?
     	1. 服务器关闭
     	2. session对象调用invalidate() 。
     	3. session默认失效时间 30分钟,这就是一些网站30分钟重新登录的原因
     	可在tomcat的conf中web.xml中修改默认配置
     		选择性配置修改	
     		<session-config>
     	        <session-timeout>30</session-timeout>
     	    </session-config>
    
    1. Características de la sesión

      1. la sesión se usa para almacenar los datos de múltiples solicitudes para una sesión, y se almacena en el lado del servidor
      2. La sesión puede almacenar datos de cualquier tipo y tamaño
      • La diferencia entre sesión y cookie:
        1. La sesión almacena datos en el lado del servidor y cookies en el lado del cliente.
        2. No hay límite de tamaño de datos para la sesión, las cookies tienen
        3. Los datos de la sesión están seguros. En comparación con el
          jsp inseguro, la cookie no se puede utilizar directamente en el navegador. Utilice el servidor

Cuando se comparan cadenas para la igualdad, se debe considerar la variable que está vacía. La mejor manera es, str.equals, que puede garantizar que no esté vacío para llamar a equals.
Si todas las variables son variables, puede usar && para determinar si es igual a nulo primero

El problema de la lógica del código de verificación debe ser único y dejará de ser válido cuando se agote; de ​​lo contrario, la verificación de inicio de sesión no será válida

Supongo que te gusta

Origin blog.csdn.net/lidashent/article/details/107761208
Recomendado
Clasificación