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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。