cookie和session的区别

一、Cookie的特点:
1、cookie是一门客户端缓存技术
2、cookie数据由服务器生成,发送给浏览器保存
3、cookie数据的格式:键值对
4、cookie数据过期机制:设置expire值
cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...。
cookie有很多使用场景,在项目中比较常见的有:
1、登录记住用户名和密码
2、记录用户浏览记录
  ...
上面应用中大家最熟悉的应该就是记住用户名这个场景了,以京东网站的登录功能为例,当我们登录了一次京东,后面再去登录页面登录的时候,会发现它会帮你回填之前的用户名,这个场景就是通过cookie技术实现的。

二、session的特点:
1、session是一门服务端会话缓存技术。
2、session由服务器端的web容器创建,保存在服务器端。
3、session保存数据:键值对形式
4、session过期:默认30分钟
  session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据。

  通过fiddler抓包可以发现,login登录接口的响应头里有一个“set-cookie”的头信息,里面就有“JSESSIONID=8AC39619BB5BE*********4337”这个信息,浏览器看到这个响应头就知道要把这个数据写到cookie当中,cookie名称为:“JSESSIONID”,值为:“8AC39619BB5BE*********4337”。这个session会话编号就是服务器返回的。服务器端的这个session会话保存了登录用户的信息。

  登录完成后再访问系统中的任何页面都是有没有问题的,因为后面每次请求都会带上浏览器里cookie里面的这个“JSESSIONID”的值过去。

三、token机制。
app项目为例:

一般app项目都会基于一个token做鉴权。
因为此时客户端不是浏览器,因此就没有cookie这一说了。
当用户登录app时,服务器会响应回来一个token信息(一般都是返回的一串唯一的标识符,比如说uuid或其他)。

服务器端会将登录用户跟token(票据)保存一个映射关系,一般保存在redis或者表里面,服务器端响应回来的token会缓存在手机的本地缓存里,后面手机去访问app的其他页面,就会带着这个token去服务器做验证。
如果通过这个token能够从redis找到登录用户信息,那么就认为你是已经登录了的用户。

三者相同的点:

不论是cookie、session还是token,都可以设置时限,一段时间后,就会失效。当失效之后,再次访问的时候,就需要重新登录了。

posted @ 2019-07-07 22:50  板栗+  阅读(1040)  评论(0编辑  收藏  举报