对session和cookie的理解

一、对session和cookie的理解

 

1、session顾名思议,是指一个会话的过程,与客户端(即浏览器并无关系),服务器端只生成/识别sessionID

2、sessionID生成过程,首先由客户端发起访问,服务端判断客户端是否带有sessionID并判断sessionID是否有效,如果有,则继续使用这个sessionID,如果没有,则重新生成sessionID,并将这个新的sessionID返回给客户端

3、sessionID一般由客户端访问时的cookie的JSESSIONID参数带进去,一般一个浏览器的cookie由域(比如:localhost)和路径(比如:/login)决定,因此JSESSIONID也由这两个条件决定

4、由于上面3和1的共同原因,当我们使用同一浏览器的不同窗口访问同一域和路径下的web项目时,前一次访问的sessionID会被后一次访问的sessionID覆盖掉,所以当我们不停的切换两个窗口并刷新页面时,sessionID都会改变,这个原理用到用户登录上也是一样,当前一个窗口用账号A登录,后一个窗口用账号B登录,然后再回到前一个窗口并刷新页面,那么这时前一窗口的登录信息就会变成账号B的

5、在session没有共享的情况下,当我们用同一浏览器访问集群下的不同域的时候,其实两个session是不同的,所以两次都得登录,但在session共享的情况下,只需登录一次就行,具体共享原理,由以下第6点来说明

6、session共享其实就是在集群的每一台机器都可以访问到其他机器下的session值,这只是一个理论概念,实际的实现方式有好几种,这里我只介绍四种java开发者常用的

(1)把登录信息放到cookie中,这个最简单,但最不安全

         当浏览器访问服务的时候,服务端只要根据cookie中的数据识别用户即可

(2)把session信息(主要是指sessionID及登录信息)持久化到数据库/本地文件

         当浏览器访问服务的时候,服务端去数据库/本地文件读取当前请求的sessionID,如果存在并且没过期,则验证通过

(3)把session信息保存到redis中,这也是目前最流行、最安全、速度快的一种方式

         当浏览器访问服务的时候,服务端去redis读取当前请求的sessionID,如果存在并且没过期,则验证通过

(4)各集群节点下的服务器session(双向)数据同步,据我了解有ZooKeeper的服务注册功能可以实现

7、集群下session共享理解图




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多栖码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值