集群、分布式丢失session

创建springboot工程

创建User类

创建User类,封装登录用户的信息

package top.malaoshi.stdsession.bean;

import java.io.Serializable;

public class User implements Serializable {
    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

}

创建测试Controller

package top.malaoshi.stdsession.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import top.malaoshi.stdsession.bean.User;

import javax.servlet.http.HttpSession;

@RestController
public class TestSessionController {

    @GetMapping("set")
    public String set(HttpSession session){
        User user=new User();
        user.setName("李雷");
        user.setSex("男");
        user.setAge(20);

        session.setAttribute("string","字符串");
        session.setAttribute("user",user);

        return "ok";
    }

    @GetMapping("get")
    public String get(HttpSession session){

        String string=(String)session.getAttribute("string");
        User user=(User)session.getAttribute("user");


        return String.format("name:%s,sex:%b,age:%s----string:%s",user.getName(),user.getSex(),user.getAge(),string);
    }
}

两个方法,一个向session放入数据,一个从session取数据

测试

启动服务

将该工程打成jar包,启动,此服务端口为8080
在idea中修改端口为8081,启动

访问8080服务

在浏览器中访问8080服务:http://localhost:8080/set 测试向session放入数据,页面显示内容如下:

ok

这是servlet默认的存放在cookie中的session key:JSESSIONID

访问8081服务

在浏览器中访问8081服务:http://localhost:8081/get 测试从session取出数据,访问页面报错

结论

2个服务各自的JSESSIONID值不同