0
点赞
收藏
分享

微信扫一扫

这就是Session学习笔记(在分布式系统使用Session)

江南北 2022-03-12 阅读 76

1.分布式系统 Session 共享方案(Session的发展史)

2。Session的简介

3. Session的原理

4.使用Session,极其的简单

1.分布式系统 Session 共享方案(Session的发展史)

1)Session在分布式项目中的地位:

        分布式项目往往由许多项目进行整合,这就势必造就了很多跨域访问,以及负载均衡时的资源共享,首先明确传统的HttpSession是不能跨域的,也就说一个服务器是不能拿到另一个服务器的会话对象的

他们的逻辑大小是:每个tomcat包含各自项目,项目 里面最高的共享会话是ApplicationSession。

于是为了解决不同项目之间的Session共享出了下面几个方案:

1.Session广播:每个节点都需要不断的同步Session状态,资源浪费

2.使用Nginx代理:多个Tomcat分摊整个Session,单点故障资源丢失

3:自定义的方式实现Session:自己手动模拟Session的实现,结合cookie与redis实现,将Nginx原本存放到服务器端的map放到redis中

4:SpingSession:集成使用,上面自定的方式还是比较麻烦的,开始 很多人都是不断的把它打包成为一个封装类,然后使用,随着发展Spring直接帮我们搞定了,现在就是引入注解直接调用就行,连配都不配了。

2.Session简介:

        Spring Session 是 Spring 一个顶级项目,可以使用 Redis 作为数据存储。同时还提供了 对 MongoDB 和 Geode 的支持的两个二级子项目

        

3. Session的原理:

大前提:JSP 页面没有禁用 Session 功能。服务器端内容调用过 request.getSession()

1)用户访问服务器的时候,服务器会判断请求是否写到了cookie,没有服务会创建一个cookie,key为jsession,value是长字符串。同时实例化一个Session对象,把Session对象放到了全局map,map的key是cookie的value,map的value是Session的对象,同时记录各种状态

2)服务器响应给客户端结果,响应对象中包含 Cookie 内容

3)客户端再次请求服务器端时会自动携带 Cookie 内容

4)服务器端再次接收请求后发现请求中 Cookie 带有 JSESSIONID,根据 JSESSION ID 的值进行从 Map 中取出 Session 对象,会判断 lastAccessedTime 和 maxActiveInterval 属性, 判断 Session 是否失效,如果失效执行 a)步骤重新创建 Session 对象。如果没有失效修改 lastAccessedTime 为当前访问时间

 

4.使用SpringSession

1)依赖,就需要这两个

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

        

2)注解   @EnableRedisHttpSession 注解:

         没有特殊要求,完全可以不写,主要是设置一下个别参数

然后 就可以直接通过HttpSession直接使用了

//  补一个

// 异步请求携带 cookie 时,需要设置 allowCredentials=true 表示允许接收 cookie

@CrossOrigin(allowCredentials="true")

举报

相关推荐

0 条评论