浅析cookie、session、localStorage、sessionStorage之不一样

基本概念

Cookiecss

  • Cookie顾名思义,小甜饼,小饼干的意思,它的小主要定义在数据大小限制为4KB左右,它的做用可谓是十分的强大了。Cookie是网站为了标识用户身份而存储在客户端的一个存储技术,同时它还能作用户的身份验证。

Session前端

  • Session翻译过来的意思是会话,它在先后端中的意思能够理解为数据的存储形式,它可以配合cookie实现用户身份的验证,而在本篇文章的后面说起到的sessionStroage,是一个前端概念,它能够将一部分数据在当前的会话窗口中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage中的数据会被清空的,能够理解为当前会话窗口已关闭。

聊一聊cookie和session的区别

Cookie

cookie一般用于先后端进行身份验证的时候,标记用户的身份不同凡响。说到cookie的做用,为何要使用cookie,那就可能会说到http了,由于http是一种无状态的协议,无状态(你们能够理解为我上一秒登录完网站,下一秒服务器再次收到访问网站请求的时候,它不认识你了,须要再次登录,也能够说是不知道哪一个客户端向服务器发送了请求)这就会致使一种状况出现:某个同窗刚登录完淘宝,跳转到购物车界面,加入完购物车的时候,须要再次登录,想一想这种用户体验真的是太差了~因此Cookie诞生了。web

Cookie的缺点

可是cookie不是很安全,由于别人能够分析存放在本地的cookie并进行恶意使用,天然而然咱们想到了网站漏洞XSS攻击(跨站脚本攻击),它的原理:攻击者往web页面里插入恶意的脚本代码(css,js)当用户浏览该页面时,嵌入其中的脚本代码会执行,从而达到恶意攻击用户的目的,从而盗取cookie,破坏页面结构,这就须要咱们在cookie字段中加入HttpOnly属性,保护好cookie,或者咱们能够利用session,在服务器端用session去管理cookie面试

session是什么哇

session是由cookie进行标记的,将cookie里的数据保存在服务器端,当须要记住用户时,好比前面说的登录,在服务器端会设置一个响应头Set-Cookie,返回给客户端,例如:Set-Cooki:SESSIONID=654321;客户端接收到这个响应后,此后每次发送一个请求,浏览器都会自动带上Cookie请求头这个小饼干,小印记,对应内容则是Cookie:ESSIONID=654321,在服务器端存有session,之后每次客户端发送请求的时候都会与服务器端的session进行对比,若是对上了,就能够识别是哪一个客户端发来的请求了。后端

session的缺点

由于session在服务器端存储,会出现什么的状况呢?当一年一度的淘宝双11来临时,淘宝官网无疑会被大量访问,当同一个域名被大量访问时,一个域名下的众多服务器保存着一样的session,这样session所占的内存不可思议,这样会下降服务器的性能,考虑到服务器的性能优化

解决办法:
(1)共享session
将session提取出来,集中存放管理
(2)token令牌验证
客户端与服务器端的通讯服务不须要存储,当进行通讯交互时,能够经过解析token里面的信息来判断是否登录。token里面能够携带cookie解析出来的信息,这样每次请求时添加一个token验证,就能够达到优化服务器性能的效果了。

浏览器

安全性的考虑

须要注意的是,不是什么数据都适合放在 Cookie、localStorage 和 sessionStorage 中的。使用它们的时候,须要时刻注意是否有代码存在 XSS 注入的风险。

我的建议:
缓存

  • 像登录注册这样的重要、敏感信息应当保存在session中
  • 其次临时须要信息能够存储在cookie中

localStorage、sessionStorage的异同

特性
Cookie
LocalStorage
sessionStorage
数据的生命周期

通常由服务器端生成
可设置失效时间。如
果在浏览器生成,默认
是关闭浏览器以后失效安全

一旦存入,
除非清除,
不然永久保存性能优化

仅在当前会话有效,
关闭页面或浏览器后被清除服务器

存放数据大小

4KB

通常为5MB

通常为5MB

与服务器端通讯

每次都会携带在同源
的http请求头中,若是
使用cookie保存过多
数据会带来性能问题的

仅在客户端中保存
不参与服务器之间的通讯

仅在客户端中保存
不参与服务器之间的通讯

用途

服务器端生成,
用于标识用户身份

用于浏览器缓存数据

用于浏览器缓存数据


localStorage、sessionStorage的操做方法

setItem存储value

用途:将value存储到key字段

{  sessionStorage.setItem("key", "value");       localStorage.setItem("site", "lsh");  }


getItem获取value

用途:获取指定key本地存储的值

{  var value = sessionStorage.getItem("key");      var site = localStorage.getItem("site");  }


removeItem删除key

用途:删除指定key本地存储的值

{  sessionStorage.removeItem("key");     localStorage.removeItem("site");  }


clear清除全部的key/value

用途:清除全部的key/value

{  sessionStorage.clear();     localStorage.clear();  }



做者:大三前端小白一枚,由于本身正在准备面试,因此本身参考别处整理了一些关于本地存储和身份验证的知识;欢迎掘金里的前端大牛,前辈们,老师们前来指导,我会虚心学习和继续努力探索前端技术奥秘的~~
出处:
相关文章
相关标签/搜索