当前位置: 首页 > news >正文

cookie,localStorage和sessionStorage的区别

基本概念

​ cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

​ 当访问者首次访问页面时,他或她也许会填写他/她们的名字。名字会存储于 cookie 中。当访问者再次访问网站时,他们会收到类似 "Welcome Jacob!" 的欢迎词。而名字则是从 cookie 中取回的。这通常就是通过在 cookie 中存入一段辨别用户身份的数据来实现的。

 在HTML5之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高。

​ 在HTML5中提供了两种在客户端存储数据的新方法:

//JS设置cookie、读取cookie、删除cookie
//写cookies
function setCookie(name,value)
{
   var Days = 30;
   var exp = new Date();
   exp.setTime(exp.getTime() + Days*24*60*60*1000);
   document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}

//读取cookies
function getCookie(name)
{
   var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
   if(arr=document.cookie.match(reg))
   return unescape(arr[2]);
   else
   return null;
}

//删除cookies
function delCookie(name)
{
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval=getCookie(name);
    if(cval!=null)
    document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}

 

sessionStorage

​ 为每一个给定的源(given origin)维持一个独立的存储区域,该存储区域在页面会话期间可用(即只要浏览器处于打开状态,包括页面重新加载和恢复)。

localStorage

​ 同样的功能,但是在浏览器关闭,然后重新打开后,除非数据被清除,否则仍然存在。

//setItem存储value
sessionStorage.setItem("key", "value"); 	
localStorage.setItem("key", "value");

//getItem获取value
var value = sessionStorage.getItem("key"); 	
var site = localStorage.getItem("key");

//removeItem删除key
sessionStorage.removeItem("key"); 	
localStorage.removeItem("site");

//clear清除所有的key/value
sessionStorage.clear(); 	
localStorage.clear();

  

 三者的区别

特性cookiesessionStoragelocalStorage
数据生命期生成时就会被指定一个maxAge值,这就是cookie的生存周期,在这个周期内cookie有效,默认关闭浏览器失效页面会话期间可用除非数据被清除,否则一直存在
存放数据大小4K左右(因为每次http请求都会携带cookie)一般5M或更大详细看这(需***)
与服务器通信由对服务器的请求来传递,每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题数据不是由每个服务器请求传递的,而是只有在请求时使用数据,不参与和服务器的通信
易用性cookie需要自己封装setCookie,getCookie可以用源生接口,也可再次封装来对Object和Array有更好的支持
共同点都是保存在浏览器端,和服务器端的session机制不同(这里有一篇很好的介绍cookie和session的文章)

 安全性问题

​ 无论是cookie还是HTML5的本地存储,都是相对不安全的,很容易受到各种各样的攻击,特别是HTML5的存储空间大,给了攻击者更大的发挥平台,所以都不能用来存储敏感信息。登录信息等重要信息还是存放到服务器里比较好。

转载于:https://www.cnblogs.com/binmengxue/p/8086803.html

相关文章:

  • Centos7下配置Python3和Python2共存,以及对应版本Ipython安装配置
  • USB驱动程序之USB总线驱动程序学习笔记
  • django的部署以及和docker 的集成
  • SDN第四次作业
  • C. 字符类型及时间类型
  • 在兄弟连学Python Python项目计算器
  • 用PLSQL Developer 查看连接因子 tnsnames.ora
  • 个人作业——软件工程实践总结作业
  • 2008nian元旦
  • display字段导致textbox的字段不显示
  • 探索Python F-strings是如何工作
  • linux下的SSH服务
  • XXE攻击
  • 2017面向对象程序设计(JAVA)课程总结
  • 带环链表 linked list cycle
  • gcc介绍及安装
  • input实现文字超出省略号功能
  • JS变量作用域
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • nodejs实现webservice问题总结
  • Python语法速览与机器学习开发环境搭建
  • React as a UI Runtime(五、列表)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 翻译:Hystrix - How To Use
  • 翻译--Thinking in React
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 每天10道Java面试题,跟我走,offer有!
  • 漂亮刷新控件-iOS
  • 如何进阶一名有竞争力的程序员?
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • #NOIP 2014#Day.2 T3 解方程
  • #Spring-boot高级
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (day 12)JavaScript学习笔记(数组3)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (转载)(官方)UE4--图像编程----着色器开发
  • .cfg\.dat\.mak(持续补充)
  • .NET CORE Aws S3 使用
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net中生成excel后调整宽度
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [2016.7 day.5] T2
  • [AIGC codze] Kafka 的 rebalance 机制
  • [BIZ] - 1.金融交易系统特点
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C#]winform部署PaddleOCRV3推理模型
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]