Session 的使用

 1、Session和Cookie的区别

Session 是存储在服务器端的数据,它的底层其实就是一个kv结构的map。

Cookie 是存储在浏览器中的数据。在控制台的应用程序中这直接看到,不安全。

2、Cookie简单介绍

首先放一张图:

所以说每一个网站的cookie几乎是只能给当前自己的页面中的接口去使用,只有这种 .xxx.com这种形式的cookie才能支持再同一域名下的网站使用。

3、Session 介绍

session就是我们后端代码中的  HttpSession session 。

它就是把数据存在我们当前这个服务下的内存中,当服务宕机或者重启后,我们原来保存的session信息就都会丢失。

所以说 Session 比较适合应用在一些小型项目中、单体项目中。

4、Session的原理

5、分布式系统下Session存在的问题

在分布式系统下我们的每个服务都有可能是集群部署,一个服务会部署到多台服务器上。

所以如果我们一个浏览器在第一次登录时使用的是我们A服务器,然后A服务器存储了我们的Session,第二次我们再调用接口被负载均衡到我们的B服务器,这个时候就没办法获取到Session了。

在分布式微服务架构下, 我们每个服务是独立的这样更不能互相获取Session了。

解决方法:

1、Session复制的方法

这个是Tomcat自身支持的,只需要修改配置即可。

但是这个也只是适用于小系统,因为这样会导致每个服务都要存储全部的session,导致数据全部重复,如果第一个服务器存储1G的数据,一共100台服务器集群部署,每台服务器就要存储100G的session数据。

2、把数据存储到cookie 

但是,这样会泄露数据,并且数据量很大。

3、Hash一致性的方法

这个是在每次发起请求时,对这个浏览器IP进行hash计算把它负载均衡发给一个我们固定的服务器。也就是这个IP用户的每次请求都会是我们固定的一个后端服务器去处理,这个IP 的所有session都只存在这一个服务器上。这个方法还是比较不错的。

但是如果服务重启,还是会丢失session,或者我们加了服务器,这就会导致重新hash出来的结果跟以前的服务器对应不上。导致找不到数据。但是其实这都算小问题。对要求不高的系统,应该可以接受。

4、使用Redis代替Session

这个方法解决了Session不能同步的问题

但是这样会导致我们要去修改所有的代码,去redis中取数据,存数据。而且存取数据都还要再进行一遍IO操作,导致服务会慢了一点。

5、Redis + SpringSession

这种方法是最好的使用session方法。

实现用redis做统一的session数据存储,实现了分布式系统下的session数据一致性。

SpringSession整合了redis存储session,这样可以实现每个服务器获取session的代码方式不做改变,而由SpringSession自动去我们的redis中获取对应的session信息。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值