面试题更新之-本地存储是什么?

news2024/11/26 9:52:57

在这里插入图片描述

文章目录

  • 本地存储是什么
  • Cookies
    • js中如何使用Cookies
  • localStorage
    • js中如何使用localStorage
  • sessionStorage
    • js中如何使用sessionStorage


本地存储是什么

本地存储是指将数据保存在用户的本地设备上,以供后续使用和访问。通过本地存储,网页和应用程序可以在用户关闭浏览器或重新打开页面后仍能保留之前保存的数据。

常见的本地存储方式包括:

Cookies(Cookie):Cookie是一小段文本信息,由服务器发送到浏览器并存储在用户的计算机上。它们通常用于跟踪和识别用户,并存储少量数据。Cookies可以设置到期时间,在过期之前保持有效。然而,每次HTTP请求都会将Cookie发送给服务器,可能影响性能。

Web Storage(Web存储):Web Storage提供了两个对象用于在浏览器中保存数据:localStorage和sessionStorage。这些对象允许开发人员使用键值对的方式存储字符串数据。与Cookie不同的是,Web Storage的数据存储在客户端而不是在每个HTTP请求中传输给服务器。其中,localStorage中的数据没有过期时间,除非手动清除,否则会一直保留;而sessionStorage中的数据只在当前会话(关闭标签页或浏览器后失效)中有效。

IndexedDB(索引数据库):IndexedDB是一种内置的浏览器数据库,它允许你在浏览器中存储和检索大量的结构化数据。它提供了一个异步API,可以进行高性能的数据操作,支持事务和索引等功能。

Cache Storage(缓存存储):缓存存储是用于存储已下载的资源的缓存区域,包括HTML、CSS、JavaScript文件、图像等。它可以提供离线访问能力,并加快页面加载速度。

需要注意的是,由于本地存储是在用户设备上进行的,因此存储的数据量有限,通常在几兆字节到几百兆字节之间。在使用本地存储时,应考虑数据安全性和隐私保护,避免存储敏感信息。

在Web开发中,根据具体需求和浏览器兼容性,可以选择合适的本地存储方式来保存和获取数据。

Cookies

Cookie是一种在浏览器和服务器之间传输的小型文本文件,用于存储特定网站的用户会话数据。它由服务器通过HTTP响应头中的"Set-Cookie"标头发送给浏览器,并在随后的请求中通过"Cookie"标头返回给服务器。

以下是关于Cookie的详细说明:

  1. 数据存储和格式: Cookie以键值对(key-value)的形式存储数据,每个Cookie都具有一个名称和一个对应的值。例如,一个名为"username"的Cookie可能具有值"JohnDoe"。每个Cookie还可以包含其他属性,如过期时间、域名、路径和安全标志等。

  2. 跨域限制: Cookie受到同源策略的限制。这意味着Cookie只能由创建它的域名所设置和访问。不同域名下的页面无法直接访问彼此设置的Cookie。然而,可以通过服务器端的设置来实现跨域共享Cookie的方式,如将Access-Control-Allow-Origin标头设置为允许访问的域名。

  3. 可选属性: Cookie还可以设置一些可选属性来控制其行为:

  4. 过期时间(Expires或Max-Age):指定Cookie的有效期限,可以是一个日期/时间表示或相对于当前时间的秒数。
    域名(Domain):指定哪些域名可以访问Cookie。
    路径(Path):指定哪些路径下的页面可以访问Cookie。
    安全标志(Secure):如果设置为true,则Cookie只能通过安全的HTTPS连接传输。
    HTTP Only标志(HttpOnly):如果设置为true,则Cookie不能被JavaScript代码访问,这有助于防止跨站点脚本攻击。
    使用场景: Cookie通常用于以下几个方面:

  5. 会话管理:通过存储用户的会话标识符(session ID),服务器可以在后续请求中识别和追踪特定用户的会话状态。
    用户偏好设置:网站可以使用Cookie来保存用户。

js中如何使用Cookies

在JavaScript中,可以使用document.cookie对象来操作和管理Cookie。

  1. 设置Cookie:

要设置一个Cookie,可以通过给document.cookie赋值一个字符串来实现。该字符串的格式为key=value;,可以添加多个键值对,用分号进行分隔。例如:

document.cookie = "username=John Doe;";
document.cookie = "email=johndoe@example.com;";

注意:在设置Cookie时,键名和键值都需要进行URL编码。可以使用encodeURIComponent()函数来编码特殊字符。

  1. 获取Cookie:

可以通过读取document.cookie属性来获取浏览器中保存的所有Cookie。返回的值是一个以分号分隔的字符串,包含所有Cookie的键值对。例如:

var allCookies = document.cookie;
console.log(allCookies);

还可以编写自定义函数来获取指定的Cookie值。例如:

function getCookie(name) {
  var cookies = document.cookie.split("; ");
  for (var i = 0; i < cookies.length; i++) {
    var cookie = cookies[i].split("=");
    if (cookie[0] === name) {
      return decodeURIComponent(cookie[1]);
    }
  }
  return "";
}

var username = getCookie("username");
console.log(username);
  1. 删除Cookie:

要删除Cookie,可以通过设置过期时间将其设置为过去的时间点。例如:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC;";
//注意:删除Cookie时,必须提供与设置Cookie时相同的路径和域。

除了设置、获取和删除Cookie,还可以通过指定Cookie的过期时间、路径、域等属性来进行更精确的控制。例如:

document.cookie = "username=John Doe; expires=Fri, 31 Dec 2023 23:59:59 UTC; path=/; domain=example.com; secure";

在上述例子中,设置了一个名为username的Cookie,它将在2023年底之前一直存在,路径为根目录,域为example.com,只能通过安全连接(HTTPS)传输。

需要注意的是,访问和操作Cookie受到同源策略的限制。只能在当前域下读取和设置Cookie,无法跨域访问其他域的Cookie信息。

localStorage

localStorage是HTML5提供的一种客户端存储机制,用于在浏览器中长期保存数据。它允许开发者在用户的本地浏览器中存储键值对数据,并且该数据在页面刷新、关闭后依然存在。

localStorage与传统的Cookie相比具有以下特点:

  1. 容量更大:localStorage的容量通常比Cookie更大,可以存储更多的数据。
    不会被发送到服务器:存储在localStorage中的数据不会在每个请求中自动发送到服务器,减少了网络传输的负担。
  2. 在同源策略下操作:localStorage遵循同源策略,只能在相同的域名、协议和端口下进行读取和写入操作。
  3. 只存储字符串类型数据:localStorage只能存储字符串类型的数据。如果需要存储其他数据类型,可以使用JSON.stringify()将其转换为字符串进行存储,再使用JSON.parse()进行读取和解析。

js中如何使用localStorage

使用localStorage非常简单:

存储数据:

localStorage.setItem('key', 'value');

获取数据:

var value = localStorage.getItem('key');

删除数据:

localStorage.removeItem('key');

清空所有数据:

localStorage.clear();

需要注意的是,localStorage中存储的数据是持久化的,即使用户关闭浏览器或重新启动计算机,存储的数据仍然存在。因此,适合用于长期保存用户偏好设置、本地缓存等数据。然而,由于是在本地存储,所以需要注意保护用户隐私和数据安全,避免存储敏感信息或将localStorage用于恶意目的。

sessionStorage

sessionStorage是HTML5提供的一种客户端存储机制,用于在浏览器中临时保存数据。与localStorage相似,sessionStorage也允许开发者在用户的本地浏览器中存储键值对数据,但与localStorage不同的是,sessionStorage中的数据仅在当前会话(session)期间有效。

会话期间指的是用户在浏览器中打开一个页面到关闭该页面之间的时间段。当用户关闭浏览器标签页或整个浏览器时,sessionStorage中的数据将被清除。

js中如何使用sessionStorage

sessionStorage与localStorage的使用方法类似:

存储数据:

sessionStorage.setItem('key', 'value');

获取数据:

var value = sessionStorage.getItem('key');

删除数据:

sessionStorage.removeItem('key');

清空所有数据:

sessionStorage.clear();

与localStorage相同,sessionStorage也只能存储字符串类型的数据,可以使用JSON.stringify()和JSON.parse()进行转换和解析其他数据类型。

需要注意的是,sessionStorage中的数据仅在同一浏览器窗口或标签页中共享。如果在新的窗口或标签页中打开网页,sessionStorage将会是全新的、空的状态,无法访问之前窗口或标签页中存储的数据。

sessionStorage适合用于一次性的、具有临时性的数据存储,例如在表单页面间传递数据或在会话期间保存用户操作状态等。它提供了一种简单且方便的方式来处理临时性的数据需求,并且不会长期占用用户的存储空间。

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

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

相关文章

Day2 图连通

A - PRO-Professor Szu 简单的来说就是 缩点、反图拓扑。 需要注意不与 n 1 n1 n1 联通的点可能会使得一些点的入度无法为 0 而无法入队&#xff0c;消除这些点的影响即可。 当时写的&#xff1a; D - BLO-Blockade 非割点&#xff1a; 2 ( n − 1 ) 2(n-1) 2(n−1)。 …

【环信集成教程】环信的那些”已读“功能实现及问题解决

写在前面 在调用环信的消息回执时&#xff0c;是否有以下的烦恼 1、发送了消息已读回执&#xff0c;为什么消息列表页的未读数没有发生变化&#xff1f; 2、发送了消息已读回执&#xff0c;为什么消息漫游拉取不到已读状态&#xff1f; 如果你有这些烦恼&#xff0c;那就继续…

大量SDK设备接入时,如何巧妙配置EasyCVR平台参数?

EasyCVR视频融合平台可支持海量视频的轻量化接入与汇聚管理。在视频能力上&#xff0c;EasyCVR可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、智能分析以及平台级联等。平台支持多协议接入&#xff0c;包括国标GB28181、RTMP、RTSP/Onvif、海…

【QT/OpenCV】QT实现张正友相机标定

相机标定 01、相机标定02、OpenCV函数及其张正友标定法2.1、相机标定步骤2.2、相机标定相关函数2.2.1 提取角点--- findChessboardCorners2.2.2 亚像素角点提取1--- find4QuadCornerSubpix2.2.3 亚像素角点提取2--- cornerSubPix2.2.4 绘制内角点 --- drawChessboardCorners2.2…

操作系统复习(非抢占式的优先数调度算法)

今天在写题目的时候遇到了一个问题&#xff0c;在非抢占式的优先数调度算法中&#xff0c;存在一种情况。优先级相同&#xff0c;并且同时到达&#xff0c;这种情况下&#xff0c;短作业优先。例如&#xff1a; 这种情况下&#xff0c;调度顺序为&#xff1a;P1、P2、P4、P3。

终极实时测试工具:NCrunch 4.17 for vs19-22 Crack

适用于 .NET 的终极实时测试工具 在编码时以内联方式查看实时测试结果和指标。 Visual Studio 的自动并发测试 NCrunch 是一个全自动测试扩展&#xff0c;旨在使编码和测试变得轻而易举。 忘记停下来运行测试&#xff0c;让 NCrunch 为您完成工作。 以您认为的速度编码和测试…

记录一个AFR去嵌S参数异常的案例。

最近在使用AFR去嵌一个S参数的时候&#xff0c;遇到了如下问题&#xff1a; 首先介绍一下这个S参数&#xff0c;一端是MCIO连接器&#xff0c;另一端是CEM连接器&#xff0c;所以测试的时候一端接MCIO测试治具&#xff0c;一端接CEM测试治具&#xff0c;再通过线缆将测试治具连…

c++--继承

1.什么是继承 C有面向对象三大特性&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff0c;封装。而继承就是代码可以复用的重要手段。他可以让程序员在原有类的基础上进行扩展&#xff0c;增加功能&#xff0c;产生新的类&#xff0c;称为子类或派生类&#xff0c;继承…

【监控系统】Prometheus监控组件Node-Exporter配置实战

这一节&#xff0c;我们来配置一下Node-Exporter&#xff0c;那么我们先来了解一下什么是Prometheus的Exporter&#xff1f; 任何向Prometheus提供监控样本数据的程序都可以被称为一个Exporter&#xff0c;它是一种用于将不同数据源的指标提供给Prometheus进行收集和监控的工具…

会议口译服务,如何做好长交传翻译?

如何做好长交传翻译工作&#xff1f;我们知道&#xff0c;长交传是会议口译中常见的一种翻译方式&#xff0c;难度比较大&#xff0c;需要不间断的听取长度为3至5分钟的段落然后进行口译。那么&#xff0c;在进行长交传翻译练习中&#xff0c;如何提升交传口译的能力&#xff0…

Linux系统使用(超详细)

目录 Linux操作系统简介 Linux和windows区别 Linux常见命令 Linux目录结构 Linux命令提示符 常用命令 ls cd pwd touch cat echo mkdir rm cp mv vim vim的基本使用 grep netstat Linux面试题 Linux操作系统简介 Linux操作系统是和windows操作系统是并列…

JavaScript--改变 HTML 的值

要改变 HTML 元素的值&#xff0c;可以使用以下方法&#xff1a; 1.使用元素节点的 innerText 属性来改变元素的文本内容。 例如&#xff1a;element.innerText 新的文本内容; 2.使用元素节点的 innerHTML 属性来改变元素的 HTML 内容。 例如&#xff1a;element.innerHTML …

ModaHub魔搭社区:Zilliz Cloud 版本类型和价格计算器教程

目录 企业版 专有部署 价格计算器 在配置集群前,您需要先选择版本。Zilliz Cloud 各版本提供不同的服务体验、计费模型,且性能及可扩展性也都有所不同 。目前, Zilliz Cloud 共有 2 个版本可供选择,以满足多样的用户需求。 企业版专有部署2 个不同的版本为不同的用户需求…

python pytest脚本执行工具

pytest脚本执行工具 支持获取当前路径下所有.py脚本 添加多个脚本&#xff0c;一起执行 import tkinter as tk from tkinter import filedialog import subprocess import os from datetime import datetimedef select_script():script_path filedialog.askopenfilename(fil…

Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解

文章目录 0.前言1. 原理详解1.1. 哨兵机制的组建1.1. 哨兵是如何知道从库的信息 1.2. 主库下线的判定1.3. 哨兵集群选举1.4. 故障的转移 2. 总结3. Redis从入门到精通系列文章4. Redis哨兵模式面试题4. 1. 什么是Redis的哨兵模式&#xff1f;4. 2. 哨兵模式的优点是什么&#x…

云原生TDengine-v3.0部署手册

云原生TDengine-v3.0部署手册 一、管理namespace1.1 创建namespace1.2 namespaces列表 二、配置3份yaml文件2.1 tdengine3-storage-class.yaml2.2 taosd-service.yaml2.3 taosd-tdengine.yaml 三、服务部署3.1 部署StorageClass3.2 部署Service3.3 部署StatefulSet3.4 查看启动…

Linux--环境变量

指令分为两种&#xff1a; ①路径指令 比如我们都知道输入ls的作用是显示当前文件及目录&#xff0c;并且ls的路径是/usr/bin/ls。那么我输入ls与/usr/bin/ls的作用是等价的。之所以带路径&#xff0c;是因为不带路径找不到命令 ②系统指令 ls就是嵌入了环境变量后&#xff0c…

C语言程序设计——指针

一、字符指针 字符指针char*两种使用方法&#xff1a; //用法一&#xff1a;指向一个字符变量 char ch a; char* pc &ch; //用法二&#xff1a;指向一个字符串首地址 const char* p "abcde"; //注意p存储的是字符串的首地址&#xff0c;也就是字符a的地址。 …

基于node.js和Vue3的医院信息管理挂号系统

随着时代的发展,无线互联网技术的应用和普及给人们的生活带来了极大的改变,现在信息技术不仅可以提高我们的工作效率,还能有效的规避一些错误风险,节约人力成本。我国国民一方面对健康的要求越来越重视了&#xff0c;另一方面现代人的健康问题日益严重&#xff0c;所以医院信息…