两者都存在有效期的说法
我们第一次访问系统后端时,后端会生成一个session来为本次请求服务,并把session的id返回浏览器端,存在名字为JSESSIONID的cookie中;
后端生成的session存在有效期的说法,好像默认是30分钟,可以通过设置指定有效时间;浏览器中的cookie也存在有效期的说法,默认是关闭浏览器后cookie过期,也可以通过设置来指定有效时间;
两者的对应关系
后端的session和前端cookie中的sessionid是对应的,两者任意一方失效,就会导致对应不上,从而会使后端重新生成session;
以下三种概括了对应不上的情况:
在cookie的有效期内(不关闭浏览器),并且session也在有效期内(不超过30分钟)时,我们继续访问后端资源,浏览器会带着名字为JSESSIONID的cookie的值去往后端,后端根据值查找系统中对应的session,为该次请求服务;在cookie的有效期内(不关闭浏览器),但是session已经过期(超过了30分钟),我们继续访问后端资源,浏览器仍然会带着名字为JSESSIONID的cookie的值去往后端,但是后端根据该值在系统中查找不到对应的session了,所以会重新生成一个session来为该次请求服务,并把新session的id返回给浏览器,存在名字为JSESSIONID的cookie中。Cookie已经过期(关闭并重新打开了浏览器),但是session还在有效期内(不超过30分钟)时,我们继续访问后端资源,浏览器中就没有名字为JSESSIONID的cookie的了,到达后端后,后端认为这是一次全新的请求,会生成一个session来为该次请求服务,并把session的id返回给浏览器,存在名字为JSESSIONID的cookie中。两者有效期的区别
1、cookie默认的有效期就是从打开浏览器到关闭浏览器的这段时间,关闭了浏览器cookie就过期了;但是如果我们设置了浏览器的有效期为1个小时,则无论中途我们做了什么,到1个小时后,cookie都会过期,过期的cookie就不会再被带着去后端了。
2、session默认的有效期是30分钟,即如果30分钟没有操作后端,则30分钟后session就会过期消亡;但是如果中途我们操作了后端,则session的有效期就会从我们操作过后重新开始算;即如果我们一直操作,则session一直都不会过期。
两者过期之后的表现
1、cookie过期之后,当我们再次向后端发送请求时,不会携带过期的cookie去往后端了;如果打开浏览器时cookie还没过期,过了一会儿过期了,则cookie不会自动从浏览器中删除,但是如果关闭浏览器再打开,或者刷新浏览器,则过期的cookie就会从浏览器中消失了。
2、session过期之后,会从服务器中被垃圾回收掉。