Session共享
- 概念介绍
术语:
在计算机中,尤其是在网络应用中,称为“会话控制”。
Session对象存储特定用户会话所需的属性及配置信息。
当用户在应用程序的web页之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
翻译:
客户端浏览器的进程从开启到结束的过程。
举例说明:
举例。假设去游泳馆,你需要交钱,前台给你一把钥匙,走到哪都要带着,因为这是你身份的唯一标识,接下来可以打开专有的柜子存衣物,游完泳,在用钥匙把衣物拿出,最后离开把钥匙归还,这次游泳的过程就是一次session,钥匙就是id,储物柜可以理解成数据库存储介质。
Local storage:
数据保存在本地的硬件设备中,下次打开浏览器访问时可以继续使用。永久保存
Session storage
可以保存用户浏览网站期间所要求保存的内容。临时保存。
- 使用原因
- 为什么
1.http协议是没有状态的,访问某个页面100次和1次对服务器来说是公平的,因为它记不住你
2.但是在一些场合需要记住当前用户,比如,登录邮箱,写邮件,收邮件,不能操作一次让用户输入一次密码 所以cookie解决了这些问题
- 解决方案
- 区别
一
Cookies机制
保存在客户端
Session机制
保存在服务器
2.sessionId的返回依赖于cookie
Cookie和Session机制的区别和联系(几个有趣的例子):
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。(Cookie原理)
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。(Session原理)
- 实际应用
- 为什么进行session共享
使用Nginx+Tomcat进行负载均衡时,希望使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的Tomcat,如果不进行Session共享,则相当于是一个新的Session。
就比如现有系统都是需要认证登录的系统,如果没有Session共享,则会导致用户退出登录。
Session共享方式
方案一:
- 首先,在apache-tomcat-8/lib路径下,放入这三个jar包。
2、然后在context.xml文件中配置redis session共享
方案二:
- 引入相关jar包
<!--redis缓存相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--session共享-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>