1、Cookie的特色:html
一、cookie是一门客户端缓存技术web
二、cookie数据由服务器生成,发送给浏览器保存redis
三、cookie数据的格式:键值对浏览器
四、cookie数据过时机制:设置expire值缓存
cookie是一门客户端技术,通常是由服务器生成返回给浏览器客户端来保存的,而且cookie是以键值对的形式保存在浏览器客户端的,每个cookie都会有名称,值,过时时间...。服务器
cookie有不少使用场景,在项目中比较常见的有:cookie
一、登陆记住用户名session
二、记录用户浏览记录app
...svg
上面应用中你们最熟悉的应该就是记住用户名这个场景了,以京东网站的登陆功能为例,当咱们登陆了一次京东,后面再去登陆页面登陆的时候,会发现它会帮你回填以前的用户名,这个场景就是经过cookie技术实现的。
一、打开火狐浏览器,访问京东登陆页面输入登陆帐号,密码完成登陆:
二、首页退出登陆:
三、登陆页面再次登陆发现用户名输入框已经回填了以前的手机号:
四、F12打开火狐浏览器找到保存手机号的这个cookie:“mp”,值就是咱们填写的用户名信息:
总结:此实现过程:登陆成功,将手机号写入到cookie---》回到登陆页面再次登陆时,根据mp这个cookie的名称取出手机号的值回填到用户名输入框(根据键取出值)
拓展:cookie是有过时机制的,能够经过设置cookie的过时时间来控制cookie何时过时
这个mp的过时时间为一个月,所以这一个月内只要不清除浏览器端的cookie数据,那么使用火狐浏览器来访问京东的登陆页面均可以看到手机号回填的效果。
2、session的特色:
一、session是一门服务端会话缓存技术。
二、session由服务器端的web容器建立,保存在服务器端。
三、session保存数据:键值对形式
四、session过时:默认30分钟
session是服务端的会话技术,当用户登陆了系统,服务器端的web容器就会建立一个会话,此会话中能够保存登陆用户的信息,而且也是以键值对的形式去保存的,如今大部分系统都是使用的session技术来作的鉴权(权限鉴定),即:当用户登陆完了才能够访问系统中的一些页面和数据。
如下面的系统为例:
直接访问系统lmcanon的首页index.html没法访问成功,会被重定向到登陆页面login.html,由于这个系统有作用户鉴权,没有登陆的用户没法访问系统里面的数据。
以下:
如今登陆系统:
打开F12能够看到,login登陆接口的响应头里有一个“set-cookie”的头信息,里面就有“JSESSIONID=8AC39619BB5BEC4426CF999A92E74337”这个信息,浏览器看到这个响应头就知道要把这个数据写到cookie当中,cookie名称为:“JSESSIONID”,值为:“8AC39619BB5BEC4426CF999A92E74337”。这个session会话编号就是服务器返回的。服务器端的这个session会话保存了登陆用户的信息。
做为cookie缓存后,在浏览器的cookie中就能看到这个数据,以下图:
登陆完成后再访问系统中的任何页面都是有没有问题的,由于后面每次请求都会带上浏览器里cookie里面的这个“JSESSIONID”的值过去。
以下图,访问“一周排课” 这个菜单的时候,请求这个页面以及页面的任何一个接口请求都会在请求头里面带上这个会话id“8AC39619BB5BEC4426CF999A92E74337” 而后再提交到服务器,以下图的这个请求:
当服务器收到这个请求的“Cookie”请求头里的会话id去服务器匹配,判断是同一个session会话,会话中有登陆用户的信息,从而判断这个请求是一个登陆用户发出的,从而放行这个请求。
上面这个过程能够用下面的这张图来表示:
拓展1:session过时处理。
当服务器端的会话过时了,那么当你继续发起请求的时候,由于你从客户端带过去的会话编号仍是以前的那个,就会验证不经过,就会提示你会话过时请从新登陆。
拓展2:token机制。
app项目为例:
通常app项目都会基于一个token作鉴权。
由于此时客户端不是浏览器,所以就没有cookie这一说了。
当用户登陆app时,服务器会响应回来一个token信息(通常都是返回的一串惟一的标识符,好比说uuid或其余)。
服务器端会将登陆用户跟token(票据)保存一个映射关系,通常保存在redis或者表里面,服务器端响应回来的token会缓存在手机的本地缓存里,后面手机去访问app的其余页面,就会带着这个token去服务器作验证。
若是经过这个token可以从redis找到登陆用户信息,那么就认为你是已经登陆了的用户。
token失效:
一段时间后,服务器端的token失效了,那么就会把此token跟用户的映射关系从redis里删掉。
后面再来访问的时候,根据你手机请求带来的token就匹配不上登陆用户了,服务器就告诉客户端,须要去作从新登陆了。