Cookie和Session

无状态

无状态是HTTP协议的特点,对事务的处理能力没有记忆能力,不能对之前的信息进行存储

HTTP状态保持

cookie:

cookie是存储在客户端的一小段文本,用来存储当前的一些信息和服务器保持交流
原理:当一个客户端游览器连接到一个URL,它会首先扫描本地存储的Cookie,如果发现其中有与此URL相关的Cookie,就会把它们返回给服务器端. cookie也是客户端同服务端建立连接后,由服务端发送给客户端,客户端每一次发送请求,都会把cookie携带,一并发送给服务器
作用:实现客户端和服务器端之间的状态保持,存储客户信息.
cookie的缺陷:

  • Cookie会被附加在每个HTTP请求中,所以无形中增加了流量
  • 由于在HTTP请求中的Cookie是明文传递的,所以不安全,还可以被伪造,不要存敏感值,除非用HTTPS
  • Cookie是通过键值对方式,只能字符串传,大小限制在4KB左右,对于复杂的存储需求来说是不够用的
  • Cookie数据在客户端本地存储
  • 默认每一次关闭页面,cookie都会失效,可以指定过期时间. //expires属性可以设置过期时间,UTC格式

Session:

  • 数据存在服务器端,不好获取和修改,比较安全
  • session文件没有大小限制
  • session存储的数据类型除了资源外的数据类型都可以
  • 服务端向客户端发送一个cookie,cookie用来保存sessionID
  • 服务器将session数据保存在服务器上,而将session的用户id存储在客户端上
  • 客户端通过向服务端发送cookie,服务端解析出sessionID, 用来匹配客户端的私有数据

session和cookie的区别

  • session 保存在服务器,客户端不知道其中的信息;cookie 保存在客户端,服务器能够知道其中的信息
  • session 中保存的是对象,cookie 中保存的是字符串
  • session 不能区分路径,同一个用户在访问一个网站期间,所有的session在任何地方都可以访问到。而 cookie 中如果设置了路径参数,那么同一个网站不同路径下的 cookie 互相是不可以访问的
  • cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行cookie欺骗
  • session 会在一定时间内保存在服务器上。当访问增多,会占用你服务器的性能。考虑到减轻服务器性能方面,应该使用 COOKIE
  • 单个 cookie 保存的数据不能超过 4k ,很多浏览器都限制一个站点最多保存 20 个 cookie
  • session 是通过 cookie来工作的

cookie, session, token特点

1.为什么会出现这种技术: 因为http协议是无状态的,它无法让服务器识别到底是谁在发送请求

1.cookie 第一代技术 不需要前端操作

  1. 存储在客户端

  2. 容量小4kb, 不安全

  3. 客户端首次同服务器通讯时,是没有cookie的,是从服务端发送过来

  4. cookie可以设置有效时间

  5. 客户端在和服务端通讯时,客户端会自动在请求头中把cookie发送给服务端

  6. session 第二代技术 不需要前端操作

  7. 存储在服务端

  8. 它存储大小就是服务器的容量大小

  9. 它会生成一个seesionID放进cookie里发送到客户端,然后客户端会把含有sessionID的cookie在通讯时发送给服务端

  10. 如果用户太多的话,服务端容量会造成泄漏

3.token 第三代技术

  1. 它是随着每一次通讯在客户端和服务端来回发送
  2. 它是一段加密后的无序字符串,保存的是用户的信息包括过期时间吗,服务端需要解密后才能拿到客户信息
  3. 发送token可以有两种方式
    ①跟随cookie走, 不需要前端操作
    ②服务器如果把token放在响应体里,那么就需要我们前端去主动存储,我们一般存储在localStorage里或者sessionStorage里, 需要前端操作
    ③如果是前端去操作token,我们需要每一次发送请求时候,手动把token放在请求头里发送给服务端
内容 cookie localStorage sessionStorage
生命周期 一般由服务器生成,可设置失效的时间,如果在浏览器端生成cookie,默认关闭浏览器后失效 除非被删除,否则永久保存 仅在当前会话下有效,关闭页面或者浏览器后被删除
数据大小 4k 20M 5M
与服务器端通信 携带在http请求头中,若保存cookie过多数据会带来性能问题 仅在客户端即浏览器中保存,不参与和服务器的通信 仅在客户端即浏览器中保存,不参与和服务器的通信
易用性 需要程序员自己封装 原生接口可以接受,亦可以再次封装来对obj和Arr有更好的支持 原生接口可以接受,亦可以再次封装来对obj和Arr有更好的支持

你可能感兴趣的:(Cookie和Session)