解决Session共享

Posted 1314justin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Session共享相关的知识,希望对你有一定的参考价值。

举例两种方式实现Session共享问题

方法一:nginx通过负载均衡IP地址固定绑定,解决Session共享

1. 修改Nginx.conf文件

技术图片

 

 

 

2. 编写一个servlet并启动两个tomcat模拟session共享失败状态

@WebServlet("/NginxSessionServlet")
public class NginxSessionServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("当前请求端口号:"+req.getLocalPort());
        String action=req.getParameter("action");
        //像session中存放数据
        if(action.equals("setSession")){
            req.getSession().setAttribute("username","lisi");
        }else if (action.equals("getSession")){
            resp.getWriter().write((String)req.getSession().getAttribute("username"));
        }
    }

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

 

技术图片

 

 

 

3. 从nginx运行页面存数据

技术图片

 

 

 

4. 控制台效果  当前走的时8080端口

技术图片

 

 

 

5. 运行页面取数据

技术图片

 

 

 

 

6. 控制台效果  还是走8080端口

技术图片

 

 

 

 

 

7. 我们再走一遍取数据方法  控制台效果

技术图片

 

 

 

 

方法二:Spring-session+Redis解决Session共享

1. 创建Controller编写存取数据的方法

@RestController
public class SessionController {
    //存放session值
    @RequestMapping("setSession")
    public String setSession(HttpServletRequest request){
        request.getSession().setAttribute("username","zhangsan");
        return "success";
    }
    //获取session
    @RequestMapping("getSession")
    public String getSession(HttpServletRequest request){
        return (String)request.getSession().getAttribute("username");
    }
}

 

2. 创建启动类

@SpringBootApplication
public class SpringBootStart {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootStart.class);
    }
}

 

3. 编写Application.yml文件

server:
  port: 8080

#redis配置
spring:
  redis:

 

 

4. 启动两遍启动类分别是8080端口和8090端口

技术图片

 

 

5. 启动运行本地Redis

 

6. 运行页面访问存放数据地址

技术图片

 

 

6.  查看Redis

技术图片

 

 

 

7. 访问获取数据地址

技术图片

 

 

8.  现在更换端口号获取数据

技术图片

 

 

server:
port: 8080

#redis配置
spring:
redis:

以上是关于解决Session共享的主要内容,如果未能解决你的问题,请参考以下文章

实现session(session数据)的共享,解决分布式session共享

跨服务器Session共享解决方案(借鉴网络 记录一下)

Spring Session解决Session共享

Spring Session解决Session共享

session跨域共享解决方案

Session共享的解决方案