JavaWeb (七) - Cookies, Sesión

1. Sesión

Sesión : un usuario abre un navegador, haga clic en una gran cantidad de hipervínculos, el acceso a múltiples recursos web, cierra el navegador, un proceso que se puede llamar la sesión;
sesión con estado : un compañero de clase llegó a la sala de clase, la clase próxima vez, lo sabremos los estudiantes habían estado allí, llamado de sesión con estado;

Un sitio web, cómo probar has estado?
El cliente - servidor

  • El servidor al cliente una carta, un servidor de acceso de cliente para traer la siguiente letra en él; galletas
  • Ha dado con el servidor de registro la próxima vez que venga voy a hacer coincidir; seesion

2. Guardar la sesión de las dos tecnologías

Galleta

  • la tecnología de cliente (solicitud de respuesta)

sesión

  • tecnología de servidor , el uso de esta tecnología, puede guardar la información de sesión del usuario, podemos poner la información o datos en la sesión!

Común: sitio web después de inicio de sesión, usted no tiene que entrar en la próxima vez, el segundo acceso directo va a subir!

Descripción detallada Ejemplo:
Aquí Insertar imagen Descripción

3. Cookies

Aquí Insertar imagen Descripción
(1) obtener la información de las cookies de la petición

(2) El servidor responde a la cookie de cliente

Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie

cookie: normalmente se almacena en el directorio de datos de programa de usuario local;

Una cookie sitio web si no hay un límite superior! detalles de entrevistas

  • Una cookie sólo puede guardar un mensaje;
  • Un sitio web puede enviar múltiples cookie al navegador, tienda de galletas hasta 20;
  • tamaño de la galleta es de 4 KB limitada;
  • límite de cookies del navegador 300

Eliminar cookies:

  • No establezca el periodo de validez, cerrar el navegador, extinguido automáticamente;
  • Tiempo de expiración establece en 0;

Codec:
la URLEncoder.encode ( "guapo créditos", "UTF-8")
URLDecoder.decode (cookie.getValue () "UTF-8")

Caso de prueba:

  • Crear un archivo llamado CookieDemo01 en el paquete java
package com.zz.servlet;

import javax.servlet.ServletException;
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.io.PrintWriter;
import java.util.Date;

//保存用户上一次访问的时间
public class CookieDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器,告诉你,你来的时间,把这个时间封装成为一个 信件,你下带来,我就知道你来了
        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();

        //Cookie,服务器端从客户端获取呀;
        Cookie[] cookies = req.getCookies(); //这里返回数组,说明Cookie可能存在多个

        //判断Cookie是否存在
        if (cookies!=null){
            //如果存在怎么办
            out.write("你上一次访问的时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if (cookie.getName().equals("lastLoginTime")){
                    //获取cookie中的值
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write(date.toLocaleString());

                }
            }
        }else {
            out.write("这是您第一次访问本站");
        }
        //服务给客户端响应一个cookie;
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
        //cookie有效期为1天
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

  • Registrada en el archivo web.xml:
<servlet>
        <servlet-name>CookieDemo01</servlet-name>
        <servlet-class>com.zz.servlet.CookieDemo01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>CookieDemo01</servlet-name>
        <url-pattern>/c1</url-pattern>
    </servlet-mapping>
  • resultados de las pruebas visitar:
    Aquí Insertar imagen Descripción

4. Sesión (Key)

Aquí Insertar imagen Descripción

¿Qué es la sesión:

  • Servidor le dará a cada usuario (navegador) para crear un seesion objetos;
  • Un seesion exclusivamente un navegador, siempre y cuando el navegador no está cerrado, la Sesión allí;
  • Después el usuario se conecta, se puede tener acceso a todo el sitio! -> Guardar la información del usuario, guardar la información de la compra ......
    Aquí Insertar imagen Descripción

Sesión y la diferencia de galletas:

  • Cookie es los datos de usuario dirigidas al navegador del usuario, el navegador almacena (tienda de múltiples);
  • Los datos de sesión de usuario se escribe en la sesión exclusiva del usuario, el lado del servidor Save (Guardar información importante, reducir los recursos del servidor de residuos);
  • objeto de sesión se crea por el servidor.

escenarios de uso:

  • Guardar la información de inicio de sesión de un usuario;
  • Información comercial de la compra;
  • Los datos se utiliza a menudo en todo el sitio, la almacenamos en la sesión.

Cuando Sesión creado para hacer las siguientes cosas:

  • Galleta Galleta = nueva cookie ( “JSESSIONID”, sessionId); // 创建 galletas
  • resp.addCookie (cookie); // volver a la respuesta de la galleta

(1) crear una sesión:

session.setAttribute("name",new Person("帅币",17));
  • Crear un archivo llamado SessionDemo01 en el paquete java:
package com.zz.servlet;

import com.zz.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        
        //得到Session
        HttpSession session = req.getSession();
        //给Session中存东西
        session.setAttribute("name",new Person("帅币",17));
        //获取Session的ID
        String sessionId = session.getId();

        //判断Session是不是新创建
        if (session.isNew()){
            resp.getWriter().write("session创建成功,ID:"+sessionId);
        }else {
            resp.getWriter().write("session已经在服务器中存在了,ID:"+sessionId);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

  • Registrada en el archivo web.xml:
<servlet>
        <servlet-name>SessionDemo01</servlet-name>
        <servlet-class>com.zz.servlet.SessionDemo01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo01</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>
  • resultados de la prueba de acceso:
    Aquí Insertar imagen Descripción
    (2) para obtener el contenido de la sesión:

     session.getAttribute("name");
    
  • Crear un archivo llamado SessionDemo02 en el paquete java:

package com.zz.servlet;

import com.zz.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        //得到Session
        HttpSession session = req.getSession();
        //取Session中存东西
        Person person = (Person) session.getAttribute("name");

        System.out.println(person.toString());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

  • Registrada en el archivo web.xml:
<servlet>
        <servlet-name>SessionDemo02</servlet-name>
        <servlet-class>com.zz.servlet.SessionDemo02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo02</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>
  • Pojo crear una clase de entidad en el archivo java
    Aquí Insertar imagen Descripción
    Persona en el código:
package com.zz.pojo;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

  • resultados de las pruebas visitar:
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción

(3) cerrar la sesión manualmente Sesión

session.invalidate();
  • Crear un archivo llamado SessionDemo03 en el paquete java:
package com.zz.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class SessionDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.removeAttribute("name");
        //手动注销Session
        session.invalidate();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

  • Registrada en el archivo web.xml:
<servlet>
        <servlet-name>SessionDemo03</servlet-name>
        <servlet-class>com.zz.servlet.SessionDemo03</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SessionDemo03</servlet-name>
        <url-pattern>/s3</url-pattern>
    </servlet-mapping>
  • resultados de las pruebas visitar:

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

No se cancela de forma manual, puede configurar automáticamente el tiempo de expiración en el web.xml configuración de la sesión:

<!--设置Session默认的失效时间-->
<session-config>
    <!--15分钟后Session自动失效,以分钟为单位-->
    <session-timeout>15</session-timeout>
</session-config>

Aquí Insertar imagen Descripción

Publicado 62 artículos originales · ganado elogios 2 · Vistas 2728

Supongo que te gusta

Origin blog.csdn.net/nzzynl95_/article/details/104236160
Recomendado
Clasificación