封装cookie、sessionStorage、localStorage公共函数(vue)

2023-10-30

封装cookie、sessionStorage、localStorage公共函数(vue)

通常一个前端项目,我们最常用到的三个浏览器储存有三种:

cookie、sessionStorage、localStorage

这三种各有各的优势

在项目快速搭建的过程中,我通常会写一个公共js文件,方便调用他们


// local操作
const localData = function(method, name, obj) {
  /*
   * 参数说明:
   * method:get获取,set存入或覆盖,clean清除
   * name:localStorage的名称
   * obj:存入的内容,可以是任意类型
   * localStorage.getItem(key):获取指定key本地存储的值
   * localStorage.setItem(key,value):将value存储到key字段
   * localStorage.removeItem(key):删除指定key本地存储的值
   * */
  switch (method) {
    case "get":
      if (localStorage.getItem(name + "_obj")) {
        return JSON.parse(localStorage.getItem(name + "_obj"));
      } else if (localStorage.getItem(name + "_str")) {
        return localStorage.getItem(name + "_str");
      } else {
        return null;
      }
    case "set":
      localData("clean", name);
      if (typeof obj == "object") {
        localStorage.setItem(name + "_obj", JSON.stringify(obj));
      } else {
        localStorage.setItem(name + "_str", obj);
      }
      return true;
    case "clean":
      localStorage.removeItem(name + "_obj");
      localStorage.removeItem(name + "_str");
      return true;
  }
};

// session操作
const sessionData = function(method, name, obj) {
  /*
   * 参数说明:
   * method:get获取,set存入或覆盖,clean清除
   * name:session的名称
   * obj:存入的内容,可以是任意类型
   * */
  switch (method) {
    case "get":
      if (sessionStorage.getItem(name + "_obj")) {
        return JSON.parse(sessionStorage.getItem(name + "_obj"));
      } else if (sessionStorage.getItem(name + "_str")) {
        return sessionStorage.getItem(name + "_str");
      } else {
        return null;
      }
    case "set":
      sessionData("clean", name);
      if (typeof obj == "object") {
        sessionStorage.setItem(name + "_obj", JSON.stringify(obj));
      } else {
        sessionStorage.setItem(name + "_str", obj);
      }
      return true;
    case "clean":
      sessionStorage.removeItem(name + "_obj");
      sessionStorage.removeItem(name + "_str");
      return true;
  }
};

// session操作
const cookieData = function(method, name, obj, t) {
  if (method === "set") {
    setCookie(name, obj, t);
  } else if (method === "get") {
    return getCookie(name);
  } else if (method === "clean") {
    removeCookie(name);
  }
};

// 设置cookie
function setCookie(key, value, t) {
  var oDate = new Date(); //创建日期对象
  oDate.setDate(oDate.getDate() + t); //设置过期时间

  document.cookie =
    key + "=" + JSON.stringify(value) + ";expires=" + oDate.toGMTString();
    //设置cookie的名称,数值,过期时间
}

// 获取cookie的单个数值
function getCookie(key) {
  var arr1 = document.cookie.split("; "); 
  //将cookie按“; ”分割,数组元素为: cookie名=cookie值
  for (var i = 0; i < arr1.length; i++) {
    //分割数组里的每个元素
    var arr2 = arr1[i].split("="); //按照“=”分割
    if (arr2[0] == key) {
      return JSON.parse(arr2[1]); //返回翻译编码后的cookie值
    }
  }
}
// 移除cookie
function removeCookie(key) {
  setCookie(key, "", -1); //cookie的过期时间设为昨天
}

export { localData, sessionData, cookieData };

这几种浏览器缓存各有各的特点与机制

Q:cookie和session的区别
A:存储位置不同
cookie的数据信息存放在客户端浏览器上。
session的数据信息存放在服务器上。

存储容量不同
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。

存储方式不同
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。

隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。

有效期上不同
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。

服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。

浏览器支持不同
假如客户端浏览器不支持cookie:
cookie是需要客户端浏览器支持的,假如客户端禁用了cookie,或者不支持cookie,则会话跟踪会失效。关于WAP上的应用,常规的cookie就派不上用场了。
运用session需要使用URL地址重写的方式。一切用到session程序的URL都要进行URL地址重写,否则session会话跟踪还会失效。
假如客户端支持cookie:
cookie既能够设为本浏览器窗口以及子窗口内有效,也能够设为一切窗口内有效。
session只能在本窗口以及子窗口内有效。

跨域支持上不同
cookie支持跨域名访问。
session不支持跨域名访问。

Q:什么是WebStorage?
A:WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回服务器。
WebStorage两个主要目标:(1)提供一种在cookie之外存储会话数据的路径。(2)提供一种存储大量可以跨会话存在的数据的机制。
HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)。

Q:对比cookie,WebStorage有什么优点?
A:(1)存储空间更大:cookie为4KB,而WebStorage是5MB;
(2)节省网络流量:WebStorage不会传送到服务器,存储在本地的数据可以直接获取,也不会像cookie一样美词请求都会传送到服务器,所以减少了客户端和服务器端的交互,节省了网络流量;
(3)对于那种只需要在用户浏览一组页面期间保存而关闭浏览器后就可以丢弃的数据,sessionStorage会非常方便;
(4)快速显示:有的数据存储在WebStorage上,再加上浏览器本身的缓存。获取数据时可以从本地获取会比从服务器端获取快得多,所以速度更快;
(5)安全性:WebStorage不会随着HTTP header发送到服务器端,所以安全性相对于cookie来说比较高一些,不会担心截获,但是仍然存在伪造问题;
(6)WebStorage提供了一些方法,数据操作比cookie方便;
    setItem (key, value) —— 保存数据,以键值对的方式储存信息。
   getItem (key) —— 获取数据,将键值传入,即可获取到对应的value值。
  removeItem (key) —— 删除单个数据,根据键值移除对应的信息。
  clear () —— 删除所有的数据
  key (index) —— 获取某个索引的key

Q:localStorage(本地存储)和sessionStorage(会话存储)的区别
A:
1、生命周期:
localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。localStorage除非主动删除数据,否则数据永远不会消失。
sessionStorage的生命周期是在仅在当前会话下有效。sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不一样的。
2、存储大小:localStorage和sessionStorage的存储数据大小一般都是:5MB
3、存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通信。
4、存储内容类型:localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理
5、获取方式:localStorage:window.localStorage;;sessionStorage:window.sessionStorage;。
6、应用场景:localStoragese:常用于长期登录(+判断用户是否已登录),适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

封装cookie、sessionStorage、localStorage公共函数(vue) 的相关文章

  • 未定义的变量:$_SESSION

    我越来越E NOTICE当核心 CakePHP 文件尝试引用从未设置或未设置的会话时 会出现错误 cake libs cake session php line 372 function read name null if is null
  • 如何使用 JSESSIONID 手动加载 Java 会话?

    我有一个处理多部分表单帖子的 servlet 该帖子实际上是由嵌入在页面中的 Flash 文件上传组件制作的 在某些浏览器中 Flash 生成的 POST 不包含 JSESSIONID 这使得我无法在发布期间从会话加载某些信息 Flash
  • 使用 python3 和请求登录 Twitter

    我正在开发一个项目 要求使用用户名和密码登录网站 我必须在 python 中执行此操作 然后才能访问只有登录人员才能访问的网站部分 我尝试了几种编码变体来执行此操作 但无法成功登录然而 这是我的编码 登录它的功能 def 会话2 url r
  • PHP 自定义会话处理程序问题 (PHP 7.1)

    我刚刚在计算机上从 PHP 7 0 迁移到 PHP 7 1 当前版本的 WAMP 的全新 全新安装 它似乎破坏了自定义会话处理程序中的某些内容 该处理程序应该将会话保存到数据库而不是使用文件系统 自定义处理程序类是 class db ses
  • 适用于移动应用程序的 Rails REST API。会议

    我正在创建一个移动应用程序 该应用程序拥有用户并与后端的自定义 Rails REST API 进行通信 我应该在登录时创建会话吗 或者我应该在每个请求中发送用户名和密码 如果会议是可行的方法 那么通常是如何实施的 只需生成令牌 并使用它们来
  • 什么是 PHP session_start()

    它是否基于 cookie 启动当前会话 从 PHP 网站上得到的 PHP如何控制会话 如果我在用户打开我的登录页面时启动会话 我什至可以使用该会话做什么 我可以使用当前会话来获取有关登录用户的信息吗 PHP 会话系统允许您将数据安全地存储在
  • 当请求来自网络服务器而不是网络浏览器时,HTTPSession 的创建如何工作?

    我有一个非常基本的问题 HTTPSession 的创建是如何工作的 我知道你们会因为我把这个问题视为类似的问题而解雇我 存在问题 但是我问这个问题是有原因的 我知道 httpsession 是 Web 浏览器所独有的 当我们第一次执行 Ht
  • ASP.Net 使用状态服务器和缓存增加 MaxProcesses(网络花园)

    我在 IIS7 上有一个 ASP Net 网站 我计划增加 MaxProcesses 以匹配服务器上的核心数量 4 核心 64 位 Windows Server 2008 根据我的阅读 如果我增加 MaxProcesses 来创建一个网络花
  • 设计对多个并发会话的支持

    我使用 Rails 3 2 11 和 Devise 2 2 3 作为订阅服务应用程序 我从另一位不再可用的开发人员那里继承了该应用程序 我是 Rails 和 Devise 的新手 我想要允许单个用户 电子邮件 拥有多个会话到同一个应用程序
  • Codeigniter:用户会话不断过期

    我正在使用 CodeIgniter 但在会话方面遇到了一个小问题 我已将 config php 中的 sess expiration 设置为 0 以便用户会话永远不会过期 但用户 甚至我自己 仍然偶尔会被踢出并要求再次登录 顺便说一句 我将
  • SQLAlchemy 是否会从同一连接重置 SQLAlchemy 会话之间的数据库会话?

    SQLAlchemy 利用连接池 这意味着相同的连接可以在不同的 SQLAlchemy 会话之间重复使用 但是 单个 SQLAlchemy 会话包含在其自身内并在关闭后被丢弃 然而 连接保持 活动 状态 我想使用 set config 将一
  • PDO 静默准备失败[重复]

    这个问题在这里已经有答案了 我正在尝试 PHPsession set save handler我想使用 PDO 连接来存储会话数据 我有这个函数作为写入操作的回调 function write id data logger WRITE id
  • 如何使用 C# 上传文件并将其保存到 Stream 以便进一步预览?

    有没有办法上传文件 将其保存到流中 该流我会将其临时保存在会话中 最后 我将尝试预览此会话中的此上传文件 例如 pdf 文件 Thanks EDITED 这就是我想做的 HttpPostedFileBase hpf Request File
  • 在 Laravel 中获取身份验证用户 ID

    如果用户登录 Laravel 5 1 我们可以访问用户 ID Auth user gt id 在我以前的应用程序 不是 laravel 中 当用户登录时 我正在为 userid 注册一个会话 我正在检查 SESSION user id 是否
  • session_regenerate_id(true) ajax 请求或快速刷新时的无效会话

    为了避免会话固定 我在每个 PHP 页面的开头使用以下代码 session set cookie params 900 domain 1 1 session start session regenerate id true 但如果页面刷新太
  • 一键提交多个表单

    我在用 SESSION为我的网上商店动态创建表单 这些表单包含客户想要的产品的自定义信息 这是布局 Page1 客户填写的表格如下所示
  • WebSphere 中跨 JVM 的会话复制

    我们建立了一个基础设施 其中网络服务器是集群的 而应用程序服务器不是 Web 服务器根据循环策略将请求路由到应用程序服务器 在这种情况下 一个应用程序服务器中可用的会话数据在另一应用程序服务器中不可用 无论如何 是否可以使来自第一个应用程序
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • session_start():无法解码会话对象

    我有时在使用 CodeIgniter 时遇到以下问题 错误 2019 03 05 19 57 26 gt 严重性 警告 gt session start 无法解码会话对象 会话已被销毁 system libraries Session Se

随机推荐

  • Window下搭建kafka运行环境

    项目场景 互联网项目中经常用到MQ 由于本地项目开发连接测试环境kafka很不方便 所有在本机搭建一个kafka 方便开发测试 前置准备 提示 Kafka的运行依赖于Zookeeper 所以在运行Kafka之前我们需要安装并运行Zookee
  • 稳压二极管

    稳压二极管的内部结构 稳压二极管的基本结构和普通的二极管基本一致 都是由一个PN结组成 结构图如下 不过由于制造工艺的不同 在反向击穿状态下 PN结不会损坏 因为工作在反向截止状态下 反向特性为典型的PN结雪崩击穿 正向特性于普通二极管相同
  • Excel下载(easyExcel)

    目录 一 框架及版本 二 数据准备 三 基础下载 四 单元格样式设置 五 单元格行合并 1 合并统计 2 合并策略类 3 注册合并策略 六 行高设置 1 非动态设置行高 2 动态设置行高 一 框架及版本 springboot 2 1 3 R
  • 【深入理解C++】调用父类的构造函数

    文章目录 1 子类的构造函数默认会调用父类的无参构造函数 2 调用父类的构造函数 1 子类的构造函数默认会调用父类的无参构造函数 include
  • 阿里java代码规范_阿里java代码规范

    命名规范 类命 驼峰式 MarcoPolo 方法名 localValue 常量 大写单词 单词间 分割 语义清楚 MAX STOCK COUNT 抽象类 以Abstract Base开始 异常类用 Exception结束 测试用Test结尾
  • 断断续续弄了两天 终于可以清理完磨人的MySQL Connector Net 6.7.4了

    我是win7 64位 我的情况是 用360软件管家卸载的时候会回滚 开始 gt regedit gt 点一下计算机 左侧列表第一个 gt Ctrl F gt 先搜索MySQL Connector Net 6 7 4 删掉一个后继续Ctrl
  • 优秀程序员必须知道的32个算法,提高你的开发效率

    size large color darkred 导读 奥地利符号计算研究所 Research Institute for Symbolic Computation 简称RISC 的Christoph Koutschan博士在自己的页面上发
  • 程序员须知:面试中最容易被问到的18个算法题(附答案!)

    原创 IT168企业级 2017 09 20 17 21 算法是比较复杂又基础的学科 每个学编程的人都会学习大量的算法 而根据统计 以下这18个问题是面试中最容易遇到的 本文给出了一些基本答案 供算法方向工程师或对此感兴趣的程序员参考 1
  • 推荐一个共享充电宝小程序

    真正的大师 永远都怀着一颗学徒的心 一 项目简介 今天推荐一个共享充电宝小程序 二 实现功能 该项目使用uniapp开发的 可打包成小程序 app app并没有适配 还需要自己改改东西 三 技术选型 uniapp 四 界面展示 五 源码地址
  • Java排序算法:冒泡算法

    Java排序算法 冒泡算法 冒泡算法 Java冒泡排序 Bubble Sort 是一种简单的排序算法 其基本思想是比较相邻的两个元素 如果顺序错误则交换位置 每次将未排序部分的最大 小 值 冒泡 到已排序部分的末尾 直到全部排序完成 下面是
  • numpy学习笔记:np.zeros应用——生成三通道全黑Mask(蒙版)

    numpy学习笔记 np zeros应用 生成三通道全黑Mask 蒙板 np zeros官方文档 np zeros官方文档 下面是一段生成256 256三通道全黑mask的demo import numpy as np import cv2
  • 使用nginx-quic支持HTTP/3

    本文主要介绍使用nginx quic和boringssl项目来对服务器进行升级支持HTTP 3协议 1 背景介绍 nginx官方从1 19版本开始 新建立了一个分支 专门用来对QUIC进行支持 官网的链接点这里 注意该项目还处于早期的alp
  • 使用深度学习TensorFlow框架进行图片识别

    Apsara Clouder大数据专项技能认证 使用深度学习TensorFlow框架进行图片识别 本认证系统的介绍了深度学习的一些基础知识 以及Tensorflow的工作原理 通过阿里云机器学习PAI基于经典的CIFAR 10数据集实现图片
  • 前端Vue 项目性能优化

    前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术 帮我们处理了前端开发中最脏最累的 DOM 操作部分 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM 但 Vue 项目中仍然存在项目首屏优化 Webpack 编译配置优
  • smbus电池信息读取

    smbus协议的智能电池 我们可以使用i2c的读写方式获取ic信息 也可以使用smbus协议的接口获取 编译方法 arm none linux gnueabi gcc batterygetdemo c o batterygetdemo 编译
  • 一元三次方程求解 蓝桥杯 764

    题目描述 有形如 ax3 bx2 cx d 0 这样的一个一元三次方程 给出该方程中各项的系数 a b c d 均为实数 并约定该方程存在三个不同实根 根的范围在 100至 100 之间 且根与根之差的绝对值 1 要求由小到大依次在同一行输
  • OSI七层网络模型和TCP/IP五层模型

    文章目录 1 OSI的来源 2 OSI七层模型的划分 3 TCP IP五层模型 1 OSI的来源 OSI Open System Interconnect 即开放式系统互联 一般都叫OSI参考模型 是ISO 国际标准化组织 组织在1985年
  • 五大浏览器对应的内核

    写这个文章是为了让自己容易快速找到 简单粗暴 3 晴天雨天不如前端在身边 各浏览器对应的内核 谷歌 Webkit gt blink 现在是blink啦 FireFox Gecko safari webkit opera presto IE
  • 【海思SS626

    目录 一 下载 Ubuntu 18 04 6 LTS 二 VMware17创建虚拟机 三 安装Ubuntu18 04LTS 四 安装其他软件 五 总结 一 下载 Ubuntu 18 04 6 LTS 问题 为什么要下载 Ubuntu18 0
  • 封装cookie、sessionStorage、localStorage公共函数(vue)

    封装cookie sessionStorage localStorage公共函数 vue 通常一个前端项目 我们最常用到的三个浏览器储存有三种 cookie sessionStorage localStorage 这三种各有各的优势 在项目