spring boot session使用,springboot设置session有效时间

  spring boot session使用,springboot设置session有效时间

  00-1010相关概念1。HTTP是一种无状态协议2。有哪些方法可以实现有状态连接3。会话是由Web服务器(Tomcat)维护的一种实现方法。实现方法和原理如何插入漂亮的代码片段摘要

  

目录

 

  00-1010无状态表示协议没有用于事务处理的内存功能。

  缺少状态意味着如果后续处理需要之前的信息,则必须重新传输之前的信息,这可能导致每次连接中传输的数据量增加。

  另一方面,当服务器不需要以前的信息时,响应更快。

  直观来说,每个请求都是独立的,与前一个请求和后一个请求没有直接联系。

  

相关概念

烹饪会话应用程序例如:

 

  但是,为了增加利润。她想鼓励顾客购买。所以告诉你,只要你一个月买5瓶以上啤酒,我就送你一个酒杯。

  我们看看这种情况我们怎么去实现呢?

  答:给客户一张磁卡,里面有客户过去的购买信息。

  这样店家就能知道了。这是饼干。

  b:给客户一个唯一的号码。基于该号码的顾客消费信息存储在商店的服务器中。这是会议。

  最后,商店可以在全球范围内决定5瓶是用于酒杯还是6瓶。这是应用程序。

  事实上,这些机制为无状态的传统购买流程添加了一些东西,使整个流程变得有状态。Web应用就是这样。

  

1.HTTP是无状态协议

会话由Web容器管理,即一个会话只保存在一台机器上,适用于单个应用;

 

  然而,随着体系结构的实践和向微服务分布式集群的不断演进,传统的会话已经无法工作。为了解决所有服务器共享一组会话的问题,需要将会话存储在一个公共的会话存储库中,所有服务器访问同一个存储库,这样所有服务器的状态都是一致的。

  Spring Session支持的库包括Reids、MongoDB和JDBCCookie。客户端(浏览器)维护的会话对应一个浏览器窗口,浏览器关闭时会话消失。

  00-1010这里主要说明SpringBoot如何实现会话保持。

  Spring Session中会话共享的实现可以很容易的与Spring Secuity集成,比如添加findSessionsByUserName,rememberMe,限制同一账号可以同时在线的会话数量(如果设置为1,可以取消之前的登录)等等。

  00-1010实现方法:Springsession redis(会话可以在不同服务器之间共享,适合多机部署)

  00-1010服务器首先寻找相应的cookie值(sessionid)。

  根据sessionid,从服务器端的会话存储中获取对应id的会话数据,并返回。

  如果找不到sessionid,服务器将创建会话,生成与sessionid对应的cookie,并将其写入响应头。

  

2.哪些方法可以实现有状态连接

 

  

3.Session是由Web服务器端(Tomcat)维护的

POM依赖性

 

  //依赖依赖groupIdredis.clients/groupId工件Jedis/工件ID/依赖依赖groupIdorg.springframework.session/groupId Artifact ID spring-session-core/Artifact ID/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>application.yml

  

// 配置redis  spring:  redis:    host: localhost    port: 6379    database: 0    jedis:      pool:        max-active: 100        max-wait: 10        max-idle: 10        min-idle: 10

RedisHttpSessionConfiguration.java

 

  

  /** * 开启Redis Http Session */@Configuration@EnableRedisHttpSessionpublic class RedisHttpSessionConfiguration {}

SessionController.java

 

  

@RestControllerpublic class SessionController {    @RequestMapping("/session")    public Object springSession(@RequestParam("username") String username, HttpServletRequest request, HttpSession session) {        Cookie[] cookies = request.getCookies();        if (cookies != null && cookies.length > 0) {            for (Cookie cookie : cookies) {                if (cookie.getName().contains("JSESSION")) {                    System.out.println(cookie.getName() + "=" + cookie.getValue());                }            }        }        Object value = session.getAttribute("username");        if (value == null) {            System.out.println("用户不存在");            session.setAttribute("username", "{username: " + username+ ", age: 28}");        } else {            System.out.println("用户存在");        }        return "username=" + value;    }}

访问8080端口,查看

 

  

 

  

总结

服务端首先查找对应的cookie的值(sessionid)。

 

  根据sessionid,从服务器端session存储中获取对应id的session数据,进行返回。

  如果找不到sessionid,服务器端就创建session,生成sessionid对应的cookie,写入到响应头中。

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: