【详解】深入理解Cookie,Session会话,图解Session原理
双11就要来了,你准备好剁手了吗?现在我们思考一个问题:当你用电脑登陆淘宝网后,当你下次再打开淘宝网,你发现网页会记住你的用户名和密码,并且可以自动登陆。网页是怎么做到的呢?使用的技术是Cookie和Session。下面让我们一起研究Cookie和Session是怎么做到的。初识Cookie,Session做过Web开发的朋友们都应该知道,在开发过程中经常和Cookie,Session打交道。个人
双11就要来了,你准备好剁手了吗?现在我们思考一个问题:当你用电脑登陆淘宝网后,当你下次再打开淘宝网,你发现网页会记住你的用户名和密码,并且可以自动登陆。网页是怎么做到的呢?使用的技术是Cookie和Session。下面让我们一起研究Cookie和Session是怎么做到的。
初识Cookie,Session
做过Web开发的朋友们都应该知道,在开发过程中经常和Cookie,Session打交道。个人理解如下:
- Cookie,Session可以说都是容器,容器的存在具有时间限制。
- Cookie是客户端的会话容器;Session是服务端的会话容器。
- Cookie和Session用于保存浏览器端的用户数据。
Cookie详解
我们在登录网页的时候,登录百度云账号成功后。当我们把网页关闭,再次打开网页的时候,我们依然处于登录状态,并没有随着关闭网页的状态而消失,这是怎么回事呢?
原来我们使用了Cookie技术,每一次用户登录的时候,Cookie都会把用户的信息提取出来,并且通知服务器,这个用户之前已经登录过了,那么Cookie怎么存储的呢?以什么样的形式保存呢?
<1>Cookie保存浏览器数据的形式
谷歌浏览器Chrome是以文件的形式对Cookie进行保存,文件保存进行加密。
Cookie是怎么保存浏览器的数据呢?现在我们创建一个Servlet来测试下,Cookie的参数中第一个参数是Cookie的名字,第二个参数是Cookie存取的内容。然后将Cookie保存在浏览器中。 有点键值对的意思。
获取浏览器所有的cookie信息。
测试的时候,打开网页代码按F12 ,在Headers中可以看到Cookie的内容,使用键值的形式。
学集合的时候,我们都知道,通过集合的key可以得到对应的value,Cookie也一样,通过的是Cookie对象.getValue()。
<2>Cookie的时效性
时效性就是Cookie在浏览器存活的时间。Cookie时效性默认为打开——>关闭浏览器窗口的时间。
大家可以测试一下,当你打开网页,再关闭网页再打开网页,分别遍历Cookie的内容。当网页关闭再打开的话,输出的Cookie的内容是null。
时效性的设置:使用Cookie对象调用setMaxAge(),单位为秒。比如以下是在浏览器保存7天的写法:
<3>Cookie的总结:
- Cookie是浏览器保存在本地的文本内容
- Cookie常用于登陆状态,用户资料等小文本
- Cookie具有时效性,Cookie的内容会伴随着请求发送到服务器
Session详解
1.Session(用户会话)用于保存"浏览器窗口"对应的数据。
2.Session数据用于保存在tomcat的服务端内存中,具有时效性,默认保存的时间为30min。
3.Session通过浏览器Cookie的sessionId的值来获取不同的用户数据。每一个Session被创建后,Cookie保存一个sessionId的值。
<1>sessionId是什么呢?
形象的将session看做和浏览器窗口绑定的对象,对浏览器产生的数据,tomcat服务器会单独的创建一个存储空间,每个浏览器对应的存储空间都是不同的,存储空间的标识符就是sessionId。与窗口绑定的,且保存在tomcat内存中的对象,专业名词session。
SessionId是Cookie的获取服务端Session数据的凭证,相当于身份认证,Cookie通过SessionId提取只属于自己的Session服务端的数据。
<2>session容器内数据的存取
session也类似于Cookie的存取,以键值对的形式存取。
下面是创建Session,向session存储数据的过程,和从session获取数据的过程代码:
<3>Session原理(重点)
1、用户第一次请求浏览器,将信息登陆到浏览器:
当浏览器发送请求到服务器的时候,tomcat发现是一个全新的请求,会在tomcat内存中开辟新的一块内存,并给它一个新的sessionId作为标记。servlet调用setAttrition中设置session的名字--键值,比如name = 张三就被保存下来,tomcat将生成的sessionId返回给浏览器,浏览器会把这个sessionID值存储到Cookie中,只要Cookie在有效期内,sessionId就会随着请求发送给服务器。
2、用户第二次请求浏览器:
当浏览器第二次发送请求给服务器的时候带有一个第一次记录的sessionId ,tomcat服务器通过存储的sessionID,就知道了浏览器存储的sessionId对应数据存储的区域,调用request.getsession()的时候,获取sessionID对应的数据,将数据取出来返回给服务器。达到用户自动登陆的目的。
具体如下图:
整个Session原理的过程可以看成:用户去银行取钱。
sessionId相当于银行卡号(唯一标识);Cookie相当于银行卡;服务端的session相当于银行。
- 用户第一次去银行需要办银行卡,也就是用户第一次访问浏览器,办过银行卡,银行把sessionid返回给用户,此时的用户有银行卡号,银行卡,将钱存进银行卡。银行开辟内存信息存储用户信息。用户根据银行卡号可以查到银行里面还有多少钱。第一次银行会记录用户的信息。
- 用户第二次去银行,由于已经有银行卡了,只要银行卡在有效期内,就可以根据银行卡号(sessionID)去取钱,服务端session银行对比银行卡号后,将钱(数据)返回给浏览器。
- 关于Cookie的有效期到了自动销毁,Cookie相当于银行卡,银行卡丢了,但是钱还在银行。相当于客户端的Cookie已经不在有效期内,如关闭网页等等。
总结
- session,cookie是存储在不同位置的容器,容器有存储,有取出
- sessionId是Cookie获取存储在session容器数据的唯一标识,就是根据sessionid查数据
- 不积跬步无以至千里,做一个懂得坚持的人。
更多推荐
所有评论(0)