localStorage、sessionStorage 和 Cookie 区别、 用法、 和应用场景等(一张表格解决)

localStorage、sessionStorage 和 cookie全面对比

localStoragesessionStorageCookie
储存位置保存在客户端,不与服务器进行交互通信(硬盘中)保存在客户端,不与服务器进行交互通信(内存中)浏览器端
储存内容存储字符串类型,对于复杂的对象可以使用JSON.stringify和JSON.parse来处理与localStorage相同cookie只能保存字符串类型,以文本的方式,格式为 document.cookie = name='value; expires=UTC"; path=/'path 参数,属于的路径,默认为当前页面
生命周期永久的,关闭页面或浏览器之后localStorage中的数据也不会消失及在当前会话下有效,在关闭了浏览器窗口后就会被销毁如果不在浏览器中设置过期事件,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称为会话cookie。如果在浏览器中设置了cookie的过期事件,cookie会被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期事件结束才消失。cookie是服务端发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它
安全性存在本地,相对安全存在本地,相对安全存在服务端,可能会被攻击
储存容量一般5MB以内与localStorage相同单个cookie不能超过4KB
获取方式window.localStoragewindow.sessionStoragewindow.document.cookie
数据类型'object'与localStorage相同'string'
添加修改值localStorage.setItem (key, value) 保存数据,以键值对的方式储存信息。与localStorage相同往下看
获取某项值localStorage.getItem (key) 获取数据,将键值传入,即可获取到对应的value值。key (index) —— 获取某个索引的key与localStorage相同往下看
删除删除指定键:localStorage.removeItem('key')清空全部项:localStorage.clear()与localStorage相同往下看
缺点(1)浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
(2)目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
(3)localStorage在浏览器的隐私模式下面是不可读取的。
(4)localStorage不能被爬虫抓取到。
(1)session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大
(2)依赖于cookie(sessionid保存在cookie),如果禁用cookie,则要使用URL重写
(3)创建session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以过度的使用session变量将会导致代码不可读而且不好维护。

(1)大小受限
(2)用户可以操作(禁用)cookie,使功能受限
(3)安全性较低
(4)有些状态不可能保存在客户端
(5)每次访问都要传送cookie给服务器,浪费宽带
(6)cookie数据有路径(path)的概念,可以限制cookie只属于某个路径下。
应用场景(1)长期登录(+判断用户是否已登录)
(2)历史搜索记录
(3)用户习惯
(1)网上商城中的购物车
(2)保存用户登录信息
(3)将某些数据放入session中,供同一用户的不同页面使用
(4)敏感账号一次性登录
(1)判断用户是否登陆过网站,以便下次登录时能够实现自动登录(或者记住密码)。
(2)保存上次登录的时间等信息。
(3)保存上次查看的页面
(4)浏览计数

Cookie修改添加删除

js中并没有cookie修改添加删除等方法你可以通过document.cookie='xxx'进行修改但必须要保持document.cookie = name='value; expires=UTC"; path=/'path这种格式

//设置cookie
function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  var expires = "expires=" + d.toUTCString();
  document.cookie = cname + "=" + cvalue + "; " + expires;
}
//获取cookie
function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
  }
  return "";
}
//清除cookie  
function clearCookie(name) {
  setCookie(name, "", -1);
}

Cookie的属性值

属性名说明默认值作用域
Expires到期时间:UTC--
Max-Age到期时间:秒 优先级高于Expires--
domain所属域名当前域名默认当前域名, 指定值后是当前域名和子域名
path生效的路径当前网址当前路径及其子路径
HttpOnly无法通过 JavaScript 脚本拿到--
Secure只有在加密协议 HTTPS 下生效--

注意点

localStorage

  • localStorage只在同源浏览器下储存,例如在谷歌中储存的在ie、火狐,360等浏览器中是不能读取的

sessionStorage

  • 在当前页面创建的sessionStorage, 在当前页面不关闭的情况下,在同一个浏览器中打开当前页面sessionStorage也为空

Cookie

  • Cookie并不提供修改、 删除操作。 如果要修改某个Cookie, 只需要新建一个同名的Cookie, 添加到response中覆盖原来的Cookie。如果要删除某个Cookie, 只需要新建一个同名的Cookie, 并将maxAge设置为0, 并添加到response中覆盖原来的Cookie。 注意是0而不是负数。 负数代表其他的意义。 读者可以通过上例的程序进行验证, 设置不同的属性。

  • 修改、 删除Cookie时, 新建的Cookie除value、 maxAge之外的所有属性, 例如name、 path、 domain等, 都要与原Cookie完全一样。 否则, 浏览器将视为两个不同的Cookie不予覆盖, 导致修改、 删除失败。

  • cookie的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格

  • Cookie具有不可跨域名性

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
localStorage, sessionStorage, 和 cookie 都用于在客户端存储数据,但它们有以下几个主要区别: 1. **数据生命周期**[^2]: - Cookie: 数据在设置的过期时间之前一直有效,即使关闭浏览器也会保留,除非特别设置为会话Cookie。 - sessionStorage: 仅在当前浏览器会话期间有效,即当浏览器窗口关闭时数据会被清除。 - localStorage: 数据永久有效,直到用户手动清除或浏览器清理缓存。 2. **数据传输**[^1]: - Cookie: 数据在浏览器和服务器间往返。 - sessionStoragelocalStorage: 不直接发送到服务器,仅在本地存储。 3. **存储大小和路径**: - Cookie: 通常有4k的大小限制,并且可以通过路径属性指定数据的范围。 - sessionStoragelocalStorage: 较大的存储空间(通常5M或更大),没有路径限制。 4. **跨域共享**: - Cookie: 在同源策略下共享,即同一个协议、域名和端口。 - sessionStoragelocalStorage: 仅在同源窗口内共享,即使在不同的标签页也共享。 5. **事件通知**: - Web Storage (localStoragesessionStorage): 支持事件通知,可以监听数据的变化。 在实际使用中,选择哪种存储方式取决于数据的生命周期、隐私需求以及是否需要跨页面或跨会话共享。例如,如果需要跨会话保持数据,可以选择localStorage;如果数据不需要持久化且需要跨页面共享,sessionStorage是个好选择;而cookie适合短期存储少量信息,如用户首选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值