关于Cookie和Session的一些疑惑和猜测

背景:

首先简单介绍一下,本人大三狗,马上秋招,这是我的第一篇Csdn ,以前一直潜水,感觉这个问题挺有意思的,所以想发出来给大家也看看。

另外,我的问题可能因为能力,和学习不精从而导致是一个小问题,大佬们看到了请帮我们解解惑,还请不要嘲笑我的问题幼稚。

问题描述:

关于SpringBoot中的Cookie和Session关联问题,Springboot这个强大的框架本身就为我们创建了一个全局的Session,我们可以直接使用,也可以创建,但如果我们选择手动创建的话,那么SpringBoot会自动的将自带的全局Session注入进来,也就说我们使用的仍然是其自带的全局Session。

按照此,我便创建了一个Session,并存取了用户的账号和密码等信息,接着为了和客服端关联,便创建了一个Cookie,并将Session的Id存在哪里,然后发送给客服端,这样,每一次用户的登录都将携带着cookie中的SessionId信息,这样,在后端可以通过cookie中的SessionId信息,找到存储个人信息的session,从而实现了页面跳转后数据共享的问题。(客服端本身的浏览器也会有一个自带的cookie)

那么问题来了:

 如上图,在浏览器发送了请求的时候,SpringBoot中的Controller响应了请求,这时,我获得了全局Session,然后存入数据,但注意:这个时候我并没有手动创建Cookie,也没有发送Cookie,也就是说如果浏览器要使用cookie发送信息,使用的应该是他自带的Cookie。

如上图,这是我获取全局Session的ID,并成功输出。

重点来了:

也就是说此时这个请求以及响应,请求不应该携带SessionId或者说不应该携带SpringBoot自带的全局Session的Id,同时响应也不应该携带Cookie信息(因为我并没有手动创建Cookie并发送)。

 上图是浏览器的信息,可以看到在响应头中确实没有set-cookie的信息,但奇怪的是此时的请求头中却出现了SessionId的信息,而惊奇的却是,请求头中的SessionId和后台获取的SeesionId并输出的一致????

小小的眼睛,大大的疑惑?

疑惑1:按理说请求在前,响应在后,请求不可能获取SpringBoot自带的全局SessionId?

疑惑2:就算他能知道SpringBoot自带的全局sessionId,怎么知道的?以及每一次的运行sessionID都是随机生成,是怎么放进浏览器自带的cookie中的

猜测1:

要不就是这个Session本身是在浏览器创建的(或者浏览器的后端创建的),然后通过请求中的SessionID带入到我们的后端,检测到我们在获取SpringBoot的全局sessionId,然后把带过来的Session注入到Springboot中全局session中去。

那随之而来的问题是:

浏览器后端创建的Seesion,必然知道其对应的Id,那么获取我们存在session中的信息岂不是轻而易举?

如果不是,那么造成这个问题的根本原因又是什么?

以上是不手动设置cookie:

 如上图,我手动创建了cookie,并存取对应的SessionId(同时,我还没用sessionId想对应的JSESSIONID这个key,而是随便取的一个key),那么暗战上述,浏览器的请求本身会自带一个sessionId,同理在响应头中也会携带着我发送过去的Cookie信息。

 上图是控制台输出的SessionID信息。

 上图是浏览器的请求响应信息(不知道为啥,有点模糊,但不影响对比),我们可以清晰的看到在响应头中有set-cookie信息,而携带的信息中也却是有我们设置的kv,

但问题来了:

在请求头中我们也可以清晰的看到其发送的SessionId有两个,其中一个是JS,另一个是JSESSIONID,且两者的值是一样的,或者说这与我控制台上输出的Seesion的值三者相同。

疑惑来了:

疑惑1:js和其对应的SessionId是我们手动放松cookie值的,且响应头带了过去,那么请求头中为什么会携带这个值呢?有请求才有想要,请求头携带了响应头信息???

疑惑2:为什么三者的值相等,且都指向一个Session?

猜测2:

我们new的cookie并不是创建一个新的,而是把本身浏览器传过来的cookie注入到里面,所以我们设置cookie中js的kv值在发送给浏览器后,请求头才会同时携带js和JSESSIONID)。

也就是说先有的JSESSIONID,浏览器发送请求,将请求带到springboot,并将sessionID对应的Session注入给全局session,然后我们获取了全局session,再然后我们new 了cookie,存入我们获取的sessionId(这就解释了为什么三者值相同的问题的),然后我们new的cookie和浏览器的cookie合并,又或者浏览器发送的请求是将所有的cookie中存储的信息合并,然后发出去

那么新的问题1:cookie并不止一个,存储的信息也不仅仅是SessionId,如果合并发送,这不现实。

那么新的问题2:为什么js对应的kv会出现在请求头中,其次如果是这样的,那么session的创建也就是浏览器后台创建的,那么随之而来的便是安全问题了? 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值