首先给出结论:
Session是存储在cookie中的;
1.cookie
(1)什么是cookie?
小饼干,用于数据的临时存储,以便更方便的进行身份验证;
(2)过程原理:
① 浏览器端向服务器端(Tomcat)发送请求 -》
② 服务器根据需要生成cookie对象,并把一些数据(http请求头中的)保存在cookie中 -》
③ 服务器再把cookie放在http响应头中一并发还给浏览器 -》
④ 浏览器接收到服务器响应后,就会提取该cookie并将其保存在浏览器端;
那么,当浏览器在下一次访问"该"服务器的时候,浏览器就会把cookie放在http请求头中一并发还给服务器。服务器就会从请求头中提取该cookie对象,判别cookie中的数据,然后做出一些个性化的响应。
(3)生命周期:
① 默认为:会话结束就失效(关闭浏览器窗口,cookie就消失;<同理:关闭cookie,session就消失,详见下文>);
(4)存储位置:
浏览器端;
这样的cookie被称为:会话cookie;
会话cookie 一般保存在内存中,而不是硬盘上。但是,如果设置了有效期,cookie就会被保存在硬盘上(直到到达有效期,cookie就会被浏览器相关的程序给清除掉)
PS:忽然想起来,每当我们卸载一个软件(比如:浏览器)时,它就会提示我们是否清除cookie用户相关信息。不觉明历 !_ !
(5)cookie的缺陷:
① 大小和数量限制
通常来说每个站点只能保存20个cookie,每个cookie大小是4K以内;这里的站点指的是?我也不知道啊,我猜是网站 site
② 数据安全性
由于http请求中是以明文的方式传递数据的,所以它是不安全的哦!
2. Session:
(1)什么是Session?
话说Session的历史:它在web开发中是一个非常重要的概念,但是这个概念非常抽象也非常难定义,也是被滥用最多的一个名字之一;Session在不同场合来说,它的含义也不一样,这里主要介绍HTTPSession;HTTPsession就是服务端为客户端创建的一个对象,这个对象用来保存一些用户的数据,这些数据用于服务端和客户端的“状态保存”;什么是状态保存?麻蛋
(2)过程原理:
① 浏览器发送http请求到服务器端 ->
② 服务器端会根据请求需求生成一个Session对象,并且对这个Session赋予一个唯一的编号 ->
③ 服务器端把需要的数据记录到对应的Session对象中 ->
④ 接着,服务器端做一些逻辑处理,然后把Session对象的唯一编号,放在一个cookie中 ->
⑤ 最后,随着处理逻辑的完成,把响应发还给浏览器端 ->
⑥ 那么,浏览器端就会把这个带有Session ID的cookie保存起来 ->
当下一次浏览器端发送请求到“该”服务器的时候,就会发送这个带有session ID的cookie,服务器拿到这个带有session ID的cookie,就会取出对应的session ID,然后再到服务器中找到对应的session对象(session是存在服务端的);最后,当服务器辨别出这个用户后,就会对用户进行一些个性化的响应;
参考地址:https://blog.csdn.net/springsen/article/details/7833582
3. cookie与session的比较
(1)数据存储:
cookie以明文的方式存储在浏览器端,session存储在服务器端;
(2)安全性:
由于存储位置的原因,也就出现了浏览器端是不够安全的(但是,我们可以通过加密技术解决这个问题),服务器端更为安全;
(3)生命周期:
cookie的生命周期是累计时间的,即:到点就失效;session是以最后一次访问时间为倒计时的开始时间,同时,它还可以直接调用API来使他失效;
(4)使用原则:
cookie的缺陷,每个站点只能保存20个cookie,每个cookie大小4k以内;session是存放服务器端,会占用服务器内存,因此我们建议不要往session中存放过多过大的对象