JavaWeb

Cookie和Session会话跟踪

2022-11-16  本文已影响0人  h2coder

什么是会话

image-20221019192550392.png

问题

由于Http是无状态的,无论浏览器发送多少次请求,服务器都会将该请求当成一个新的请求,所以需要使用会话跟踪技术来解决这个问题。

Cookie和Session

Cookie

image-20221019192900673.png

Cookie的基本使用

浏览器发送请求到服务端,服务端将Cookie发送给浏览器

//创建Cookie
Cookie cookie = new Cookie("key", "value");
//发送Cookie
response.addCookie(cookie);

后续浏览器的每次请求,都会带上Cookie数据,那么服务端就可以从请求中获取Cookie数据,

//获取Cookie数组
Cookie[] cookies = request.getCookies();
//遍历每个Cookie,获取每个Cookie的键和值
for (Cookie cookie : cookies) {
    //Cookie的键
    String name = cookie.getName();
    //Cookie的值
    String value = cookie.getValue();
    System.out.println("Cookie key=" + name + ",value=" + value);
}

Cookie的原理

Cookie是基于HTTP协议实现的

image-20221019193236615.png

在浏览器中,查看Cookie

image-20221019193318254.png

Cookie使用细节

Cookie的存活时间

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,Cookie就会销毁,但也可以设置Cookie的存活时间,来控制Cookie存活

Cookie存储问题

String name = "张 三";
//URL编码
name = URLEncoder.encode(name, "UTF-8");
//创建Cookie
Cookie cookie = new Cookie("name", name);
//发送Cookie
response.addCookie(cookie);

//获取Cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
    //Cookie的键
    String name = cookie.getName();
    //Cookie的值
    String value = cookie.getValue();
    //URL解码,可能会存在空格和中文
    value = URLDecoder.decode(value, "UTF-8");
    System.out.println("Cookie key=" + name + ",value=" + value);
}

Session

image-20221019193748204.png

Session的使用

//获取Session
HttpSession session = request.getSession();

//存储数据到Session
session.setAttribute("sname", "lisi");

//从Session中获取数据
Object sname = session.getAttribute("sname");

//删除Session指定名称的数据
session.removeAttribute("sname");

Session的原理

Session基于Cookie实现的

image-20221019193840691.png

Session的使用细节

image-20221019194156663.png
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- session的最大存活时间,单位为分钟,默认为30分钟 -->
    <session-config>
        <session-timeout>5</session-timeout>
    </session-config>
</web-app>

Cookie和Session的对象

上一篇 下一篇

猜你喜欢

热点阅读