localSorage,sessionStorage,cookie三者的区别和特点

LocalStorage、SessionStorage、Cookie三者的区别和特点?

什么是Cookie

HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。

Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器发送一个Cookie,通知客户端浏览器把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

举个例子,比如我们第一次去办身份证,填了姓名,年龄…等等信息。办理成功后会得到一个身份证号,以后得到这些信息,只需要输入身份证号即可,身份证号码就是你的标识。

总结cookie机制

当用户第一次访问并登录一个网站的时候,cookie的设置以及发送会经历以下4个步骤:

  1. 客户端发送一个请求给服务器
  2. 服务器发送一个HttpResponse响应给客户端,其中包含Set-Cookie的头部
  3. 客户端保存cookie,之后向服务器发送请求时,HttpRequest请求中会包含一个Cookie的头部
  4. 服务器返回响应数据

什么是Session

session是另一种记录客户状态的机制,cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。session相当于程序在服务器上建立的一份用户的档案,用户来访的时候只需要查询用户档案表就可以了。

session的生命周期与有效期

为了获得更高的存取速度,服务器一般把session放在内存里。每个用户都会有一个独立的session。如果session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。**session的使用虽然比cookie方便,但是过多的session存储在服务器内存中,会对服务器造成压力。**因此,session里的信息应该尽量精简。

session在用户第一次访问服务器的时候自动创建。session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该session。

由于有越来越多的用户访问服务器,因此session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的session从内存中删除。这个时间就是session的超时时间。如果超过了超时时间没访问过服务器,session就自动失效了

Session的工作机制

Session的工作机制离不开Cookie

虽然session保存在服务器,但是它的正常运行仍然需要客户端浏览器的支持。这是因为session需要使用cookie作为识别标志。HTTP协议是无状态的,session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为SESSIONID的cookie,它的值为该Session的id。Session依据该cookie来识别是否为同一用户。

对于不支持cookie的手机浏览器,有另一种解决方案:URL地址重写。URL地址重写的原理是将该用户session的id信息重写到URL地址中,服务器能够解析重写后的URL获取session的id。这样即使客户端不支持cookie,也可以使用session来记录用户状态

webstorage本地存储

webstorage是本地存储,存储在客户端,包括localStoragesessionStorage,存放数据大小为一般为5MB,他们仅在客户端(即浏览器)中保存,不参与和服务器的通信。只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringifyparse来处理

  • localStorage生命周期是永久,这意味着除非用户自己清除localStorage信息,否则这些信息将永远存在。
  • sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。

为什么会有WebStorage

提供一种在cookie之外存储会话数据的路径,提供一种存储大量跨会话存在的数据的机制

localStorage和sessionStorage

  • 作用域的不同
    不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的

sessionStorage、localStorage和cookie的区别

  1. 相同点是都是保存在浏览器端、且同源的
  2. cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下
  3. 存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
  4. 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭之前有效;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie:只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭
  5. 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的
  6. web Storage支持事件通知机制,可以将数据更新的通知发送给监听者
  7. web Storage的api接口使用更方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

培训第十三天(DNS逆向解析与主从服务、ntp时间服务器)

上午 编号主机名ip地址说明修改1web服务器10.0.0.10发布部署web服务发布了一个nginx web服务2dns服务器10.0.0.11用于解析域名和ip地址1、安装bind 2、配置一个conf,zones,zone 3、检查了3个文件,启动3cli主机10.0.0.12用于模拟客户机修改了…

基于联盟链Fabric 2.X 的中药饮片代煎配送服务与监管平台

业务背景 近年来,随着公众对中医药青睐有加,中药代煎服务作为中医药现代化的重要一环,在全国各地蓬勃兴起。鉴于传统煎煮方式的繁琐耗时,医疗机构纷纷转向与第三方中药饮片企业合作,采用集中代煎模式。这些第三方煎药中…

没有51基础,能不能学好STM32?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「STM32的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 我们通常准备攻读一本大部…

【HTML】iframe

<iframe> 标签是 HTML 中的⼀个元素&#xff0c;⽤于在当前 HTML ⽂档中嵌⼊另⼀个 HTML ⽂档。它可以在⼀个 HTML ⻚⾯中嵌⼊另⼀个 HTML ⻚⾯或其他类型的⽂档&#xff0c;⽐如 PDF ⽂件或视频⽂件。 <iframe> 标签的优点包括&#xff1a; 可以让⻚⾯嵌⼊其他⽹…

浅谈监听器之断言结果

浅谈监听器之断言结果 在进行测试过程中&#xff0c;断言是一种关键组件&#xff0c;用于验证采样器&#xff08;如HTTP请求&#xff09;的响应数据是否符合预期。而“断言结果”监听器则是展示这些断言执行情况的重要工具&#xff0c;它帮助用户快速识别哪些断言通过或未通过…

JavaScript轮播图

HTML部分 <div class"box" onmouseover"over()" onmouseout"noover()"><img src"./img/zuo.png" alt"" class"left_arrow" onclick"left_last()"><img src"./img/yy.png" al…

【JAVA多线程】线程的状态控制

目录 1.JDK中的线程状态 2.基础操作 2.1关闭 2.2中断 2.3.等待、唤醒 2.4.阻塞、唤醒 1.JDK中的线程状态 在JDK的线程体系中线程一共6种状态&#xff1a; NEW&#xff08;新建&#xff09;: 当线程对象创建后&#xff0c;但尚未启动时&#xff0c;线程处于新建状态。RUN…

python毕业设计选题校园食堂菜谱推荐系统

✌网站介绍&#xff1a;✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围&#xff1a;Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容&#xff1a;免费功能设计、免费提供开题答辩P…

stack(leetcode练习题,牛客)

文章目录 STL用法总结32 最长有效括号思路代码 496 下一个最大元素思路代码 856 括号的分数思路 最优屏障思路代码 STL用法总结 关于stack的知识&#xff0c;可以看点击查看上面的博客&#xff0c;以下题目前三个全在leetcode&#xff0c;最后一个在牛客 32 最长有效括号 思路…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

C++类别(建构函数、初值串列、EXPLICIT指示词)

类别- 类别(class) 是物件(object) 的模板&#xff0c;物件的所有功能都由类别设置。 典型的类别设计如下 class class_name { access_label_1:// memberaccess_label_2:// member }; 利用关键字(keyword) class宣告类别名称&#xff0c;其后的大括弧为类别的宣告内容&…

代理IP在数据采集中具体有哪些作用

在当今信息化高速发展的时代&#xff0c;从市场趋势分析到消费者行为预测&#xff0c;从产品优化到服务改进&#xff0c;大数据都在其中扮演着不可或缺的角色。但数据的采集、整理和分析并非易事&#xff0c;特别是在面对海量的网络数据时&#xff0c;我们往往需要借助一些技术…

python3.12 String类方法大全

字符串相关链接 类型细分与链接注释 字面值 转义字符字符串字符串基础方法拼接, 索引, 路径, 长字符串分行等等内置类型str 字符串的方法 见下表 printf 风格的字符串格式化 format % values 标准库string 字符串常量字符串模块中定义的常量class string.Formatter 自定义字符…

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…

程序员拔火罐技能的分享

一.背景 之前为了考“中医康复理疗师”的证书&#xff0c;自学了拔火罐。自学主要是在自己大腿上练习&#xff0c;然后拿家人做小白鼠。后来考试没有那么严格也就顺利通过了。操作过程中&#xff0c;积累的一些小知识&#xff0c;分享给大家&#xff0c;有空在家里给家人服务体…

CTF ssrf 基础入门 (一)

0x01 引言 我发现我其实并不是很明白这个东西&#xff0c;有些微妙&#xff0c;而且记忆中也就记得Gopherus这个工具了&#xff0c;所以重新学习了一下&#xff0c;顺便记录一下吧 0x02 辨别 我们拿到一个题目&#xff0c;他的名字可能就是题目类型&#xff0c;但是也有可能…

【CSS】继承属性

属性继承 1. 字体系列属性 字体系列属性主要包括&#xff1a; font-size、font-family、font-variant、font-style、font-weight、font、letter-spacing、word-spacing、text-transform 和 line-height。如果没有在⼀个元素上设置这些属性&#xff0c;则其继承上层的相应属性…

FastAPI(七十三)实战开发《在线课程学习系统》接口开发-- 回复留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章分享FastAPI&#xff08;七十二&#xff09;实战开发《在线课程学习系统》接口开发-- 留言列表开发&#xff0c;这次我们分享如何回复留言 按…

Jenkins+Gitlab持续集成综合实战

一、持续集成应用背景&#xff1a; DevOps&#xff1a;&#xff08;英文Development&#xff08;开发&#xff09;和Operations&#xff08;技术运营&#xff09;的组合&#xff09;是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#…

NCRE3 2-1 网络总体设计基本方法

这部分记忆的比较多 概览 设计网络建设总体目标确定网络系统方案设计原则网络系统总体设计设计网络拓扑结构进行网络设备选型网络系统安全设计 设计网络建设总体目标 这部分视频没说到 确定网络系统方案设计原则 这部分视频没说到 网络系统总体设计 核心层网络结构设计 …