cookie由服务器端某个资源发送给客户端,客户端接收后即进行保存,可能保存在浏览器内存也可能保存在硬盘上,当下次客户端再访问服务器某个资源及其路径下的资源时会携带上cookie的信息.如访问/shop/xxxsevlet时,返回给了客户端一个coolie,默认情况下当访问/shop/下的所有资源时客户端的请求都会带上此cookie.
会话就是客户端连接上浏览器到浏览器关闭这是一次会话间.
session技术是基于cookie的,cookie技术存储session编号---JSESSIONID,服务器会为每个客户端都创建一块内存空间存储客户的数据,发送编号和根据编号去寻找session区域位置这些操作是客户端和服务器自动完成,不要手动编码.当在代码中调用getsession时服务器会根据jsessionid去寻找,若没有jsessionid或者找不到对应的内存,服务器就会创建一个新的session空间与对应的jsessionid.
不同的客户端访问服务器会有不同的jsessionid,比如在一个电脑上打开两个web浏览器,详见下图.
如果删除cookie的话,jsessionid会被删除,但是在服务器中的session内存空间还会存在,再次访问服务器又会创建一个新的jsessionid,创建一个新的内存空间.因为session具有一定的生命周期,所以服务器不会越来越大.
扩展:当浏览器关闭时,session会不会消失
答案:不会,session消失的方式只与上面的三种方式有关,但是浏览器关闭时,因为cookie是会话级别的,所以cookie会消失,当cookie消失后jsessionid也就消失了,所以也就访问不到之前的session了,对于这种情况可以用下图的方式来解决,即将jsessionid持久化即可.(这种持久化是只能持久化一个cookie数据还是能持久化所有的cookie数据还有待探索)