双11就要来了,你准备好剁手了吗?现在我们思考一个问题:当你用电脑登陆淘宝网后,当你下次再打开淘宝网,你发现网页会记住你的用户名和密码,并且可以自动登陆。网页是怎么做到的呢?使用的技术是Cookie和Session。下面让我们一起研究Cookie和Session是怎么做到的。

初识Cookie,Session

        做过Web开发的朋友们都应该知道,在开发过程中经常和Cookie,Session打交道。个人理解如下:

  1. Cookie,Session可以说都是容器,容器的存在具有时间限制。
  2. Cookie是客户端的会话容器;Session是服务端的会话容器。
  3. 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的总结

  1. Cookie是浏览器保存在本地的文本内容
  2. Cookie常用于登陆状态,用户资料等小文本
  3. 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相当于银行。

  1. 用户第一次去银行需要办银行卡,也就是用户第一次访问浏览器,办过银行卡,银行把sessionid返回给用户,此时的用户有银行卡号,银行卡,将钱存进银行卡。银行开辟内存信息存储用户信息。用户根据银行卡号可以查到银行里面还有多少钱。第一次银行会记录用户的信息。
  2. 用户第二次去银行,由于已经有银行卡了,只要银行卡在有效期内,就可以根据银行卡号(sessionID)去取钱,服务端session银行对比银行卡号后,将钱(数据)返回给浏览器。
  3. 关于Cookie的有效期到了自动销毁,Cookie相当于银行卡,银行卡丢了,但是钱还在银行。相当于客户端的Cookie已经不在有效期内,如关闭网页等等。      

        

                         

  总结

  1. session,cookie是存储在不同位置的容器,容器有存储,有取出
  2. sessionId是Cookie获取存储在session容器数据的唯一标识,就是根据sessionid查数据
  3. 不积跬步无以至千里,做一个懂得坚持的人。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐