1.COOKIE分两种保存形式:
1.1:客户端保存形式--硬盘COOKIE:
保存在硬盘里,也就是在浏览器的安装目录下生成一个文件夹,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的.
1.2:保存在内存中--进程COOKIE:
由浏览器维护,首先要知道,打开浏览器时,会启用进程,该COOKIE就保存在打开浏览器的进程中,当浏览器关闭时,进程结束,COOKIE也就消失了.
2.SESSION:
2.1:现在已经知道,SESSION是通过SESSIONID来实现,而SESSIONID是保存在COOKIE中,下面先来解释一下如何通过SESSIONID实现SESSION的,然后再解释一下SESSION会不会随着浏览器的关闭而失效:
2.2:当你第一次访问网站并向服务器发送请求时,服务器端会在响应头上添加JSESSIONID,此ID是服务器随机生成而且是唯一的,这个JSESSIONID其实就是SESSIONID.SESSIONID会先将自己保存 在COOKIE中,然后根据SESSIONID在服务器端(也就是ACTION中)是否已存在来判断是新建SESSION还是直接获取SESSION.简单来说,SESSION的实现机制就是这样.
2.3:首先要明确一点,当浏览器关闭后(在SESSION的有效期间),SESSION是不会消失的.只有人为调用SESSION.invalidate方法或者是超过了有效时间(有效时间默认的有效时间是30分钟,不管浏览器是够关闭,30分钟内如果没有进行操作,就会被视为超过了有效期)来清除.
2.3.1:如果SESSIONID是保存在了进程COOKIE中,那么当浏览器关闭后,COOKIE随浏览器进程一起消失,SESSIONID也就消失了,需要声明的是,此时服务器端的SESSION并不会消失(在有效时间内).当再次打开浏览器并向服务器端发送请求时,因为原来的SESSIONID已经不存在,服务器会生成一个全新的JSESSIONID,此ID在服务器端是全新的,也就是说根据此ID匹配不到相应的SESSION,所以服务器会为该SESSIONID创建一个全新的SESSION,并进行绑定.
2.3.2:如果SESSIONID是保存在了硬盘COOKIE中,那么,当浏览器关闭后,SESSION(在有效期范围内)和COOKIE(没有被人工清除)都不会消失,再次打开浏览器时,COOKIE会将SESSIONID以某种形式一起传递给服务器,服务器根据该SESSIONID去匹配SESSION.
设置SESSION有效期的目的:服务器无法可以感知浏览器是否已关闭,(当然,你可以在关闭的时候去通知服务器,但一般都不会这样做)所以关闭浏览器后,服务器端(也就是ACTION)的SESSION是不会被删除的,服务器早晚会被SESSION给撑爆的.正因为如此,所以有了有效期.
以上纯属个人总结,如果有哪位大佬发现有写的不对的地方,还烦请帮忙指出。
转载请注明原文地址: https://ju.6miu.com/read-673005.html