js怎么保存用户登录信息?js cookie操作封装

web开发中,用户登录后需要保存登录信息进行身份识别,登录后的操作都需要带上身份信息请求接口。保存登录信息有多种方法,这里使用cookie进行操作。

最终成果:封装cookie操作模块

// utils/cookie.js
export default {// 设置cookiesetCookie: function (name, value, expireDays) {var expires = nullif (expireDays) {var exp = new Date()exp.setDate(exp.getDate() + expireDays)expires = exp.toGMTString()}document.cookie = name + '=' + escape(value) + (expires ? ';expires=' + expires : '')},// 获取指定名称cookiegetCookie: function (name) {if (document.cookie.length === 0) {return null}var arr = nullvar reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')if (arr = document.cookie.match(reg)) {return unescape(arr[2])} else {return null}},// 删除cookieremoveCookie: function (name) {if (!this.getCookie(name)) {return}this.setCookie(name, '', -1)},// 清空cookieclearCookie: function () {var cookies = document.cookie.match(/[^ =;]+(?=\=)/g)if (!cookies) {return}/*var exp = new Date()exp.setTime(exp.getTime() - 1)var expires = exp.toGMTString()for (var i = cookies.length; i--;) {document.cookie = cookies[i] + '=;expires=' + expires}*/for (var i = cookies.length; i--;) {this.setCookie(cookies[i], '', -1)}}
}

cookie工具模块使用示例:

  import cookie from 'path/to/utils/cookie.js'cookie.clearCookie()cookie.setCookie('name', 'Alice', 1)cookie.setCookie('age', 20, 1)console.log(cookie.getCookie('name'))console.log(cookie.getCookie('age'))cookie.removeCookie('age')console.log(cookie.getCookie('age'))

下面是步骤拆解过程:

一、设置cookie,写入cookie

基础用法

// 创建cookie
document.cookie = 'name=Alice'
console.log(document.cookie) // 'name=Alice'// 继续添加cookie
document.cookie = 'age=5000'
console.log(document.cookie) // 'name=Alice; age=5000'// 修改cookie,名称相同的cookie会覆盖已有cookie的值
document.cookie = 'name=Tony'
console.log(document.cookie) // 'age=5000; name=Tony'

以上代码创建cookie时没有指定过期时间,cookie将会在浏览器关闭时自动删除。

设置过期时间

下面给cookie设置过期时间,过期后cookie将自动删除,否则将会保存在本地文件系统中。

// 创建cookie时,带上过期时间 expires
// 在name-value后添加分号; 再加上expires=日期时间转位GTM格式
document.cookie = 'age=5000; expires=' + new Date().toGMTString()
// 以上代码设置过期时间为当前时间,所以cookie会立即过期// 设置过期时间为10秒后
document.cookie = 'age=5000; expires=' + new Date(new Date().getTime() + 10 * 1000).toGMTString()

设置cookie方法封装

// 设置cookie
function setCookie(name, value, expireDays) {var expires = nullif (expireDays) {var exp = new Date()exp.setDate(exp.getDate() + expireDays)expires = exp.toGMTString()}document.cookie = name + '=' + escape(value) + (expires ? ';expires=' + expires : '')
}// test
setCookie('name', 'Alice', 1)

二、获取cookie

基础用法

var cookieStr = document.cookie
// 'name=Alice'

根据name获取cookie

// 获取指定名称cookie
function getCookie(name) {if (document.cookie.length === 0) {return null}var arr = nullvar reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')if (arr = document.cookie.match(reg)) {return unescape(arr[2])} else {return null}
}// test
getCookie('name')
// 'Alice'

三、删除cookie

// 删除cookie
function removeCookie(name) {if (!getCookie(name)) {return}setCookie(name, '', -1)
}// test
removeCookie('name')

removeCookie方法先查询是否存在该cookie,存在则设置过期时间为1天前,即立即过期。

四、清空cookie

// 清空cookie
function clearCookie() {var cookies = document.cookie.match(/[^ =;]+(?=\=)/g)if (!cookies) {return}var exp = new Date()exp.setTime(exp.getTime() - 1)var expires = exp.toGMTString()for (var i = cookies.length; i--;) {document.cookie = cookies[i] + '=;expires=' + expires// 或直接调用上面的 setCookie 方法// setCookie(cookies[i], '', -1)}
}

遇到cookie使用的时候就可以直接用这个工具模块,效率加倍!

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

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

相关文章

2023年广东省程序设计大赛

C 双指针&#xff0c;排序 买便宜的&#xff0c;用最贵的卖出 #include<bits/stdc.h>using namespace std; #define int long long const int N 2e5 10; int n,m; int re[2]{1,4}; int bl[4]{2,3,5,6}; int f; struct node {int x,y; }a[N]; bool cmp(node W,node Q…

ubuntu装完gnome后如何moba登录使用

在Ubuntu中安装了GNOME桌面环境后&#xff0c;你可以通过以下步骤设置MobaXterm远程桌面访问&#xff1a; 确保你的Ubuntu系统已经安装了xrdp服务&#xff0c;如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install xrdp安装GNOME桌面…

Echarts 多y轴折柱混合图

先说下需求&#xff1a;在多y轴的折柱混合图&#xff0c;点击图例时&#xff0c;对应的图会隐藏&#xff0c;但是对应的y轴的线和y轴上的那么不会隐藏。 因为是点击图例&#xff0c;所以这里用到点击事件&#xff0c;Echarts有 legendselectchanged 事件&#xff0c;如下代…

【Linux】POSIX线程库——线程控制

目录 1.线程创建方法 例&#xff1a;多线程创建 2.线程终止 2.1 return nulptr; 2.2 pthread_exit(nullptr); 3. 线程等待 3.1 等待原因 3.2 等待方法 线程终止的返回值问题 4.线程取消 5. 线程分离 5.1 分离原因 5.2 分离方法 6.封装线程 用的接口是POSIX线程库…

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换&#xff08;ADC&#xff09;1.1ADC的关键步骤&#xff1a; 2.数字模拟转换&#xff08;DAC&#xff09;2.1DAC 的基本流程包括&#xff1a; 3.PCM数据3.1PCM 数据的关键要素包括&#xff1a; 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…

代码随想录算法训练营第三十八天 | 435.无重叠区间、763.划分字母区间、56.合并区间

目录 435.无重叠区间 思路 代码 763.划分字母区间 思路 代码 56.合并区间 思路 代码 今天的三道题目&#xff0c;都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#xff0c;但一看贪心解法&#xff0c;惊呼&#xff1a;这么巧妙&#xff01…

YOLOV8逐步分解(6)_模型训练初始设置之image size检测batch预设及dataloder初始化

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 yolov8逐步分解(3)_trainer训练之模型加载 YOLOV8逐步分解(4)_模型的构建过程 YOLOV8逐步分解&#xff08;5&#xff09;_模型训练初始设置之混合精度训练AMP 接逐步分解…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

使用Java 读取PDF表格数据并保存到TXT或Excel

目录 导入相关Java库 Java读取PDF表格数据并保存到TXT Java读取PDF表格数据并保存到Excel 在日常工作中&#xff0c;我们经常需要处理来自各种来源的数据。其中&#xff0c;PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息&#xff0c;其中可能包含重要的表格数据…

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前&#xff0c;我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器&#xff08;R0-R15&#xff09;&#xff0c;其中R13&#xff0c;R14&#xff0c;R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

css中min-height

在CSS中&#xff0c;min-height 属性用于设置元素的最小高度。这意味着&#xff0c;即使内容没有达到指定的最小高度&#xff0c;元素也会尝试占据至少指定的最小高度。 例如&#xff0c;如果你有一个 <div> 元素&#xff0c;并希望它至少有200px的高度&#xff0c;即使…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

002 访问修饰符 package

访问修饰符 在Java中&#xff0c;protected、private、public 和包级别访问权限&#xff08;有时称为default或package-private&#xff09;是用于控制类、变量、方法和构造器的可见性和可访问性的修饰符。下面是这些修饰符的主要区别&#xff1a; public&#xff1a; 可见性…

vue/core源码中ref源码的js化

起源&#xff1a; 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后&#xff0c;突发奇想想看下转化成js有多少行。 进行转化&#xff1a; let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

M2m中的采样

采样的完整代码 import torch import numpy as np from torchvision import datasets, transforms from torch.utils.data import DataLoader, WeightedRandomSampler, SubsetRandomSamplerdef get_oversampled_data(dataset, num_sample_per_class):""" Gener…

C语言从头学12——流程控制(一)

C语言程序的执行顺序是从前到后依次序执行的。如果想要控制程序执行的流程&#xff0c;就必须使用 流程控制的语法结构&#xff0c;分为条件执行和循环执行。 1、if语句 if 语句在前面的举例中曾经出现过&#xff0c;这里做详细介绍。该语句用于条件判断&#xff0c;满…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

【软件设计师】——10.面向对象技术

目录 10.1 基本概念 10.2设计原则 10.3 设计模式的概念与分类 10.4 创建型模式 10.4.1 Singleton 单例模式 10.4.2 Builder 构建器模式 10.4.3 Abstract Factory 抽象工厂模式 10.4.4 Prototype原型模式 10.4.5 Factory Method工厂方法模式 10.5 结构型模式 10.5.1 A…