首页 > 其他分享 >js怎么保存用户登录信息?js cookie操作封装

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

时间:2024-05-27 18:30:30浏览次数:17  
标签:封装 name expires js cookie exp var document

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

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

// utils/cookie.js
export default {
  // 设置cookie
  setCookie: function (name, value, expireDays) {
    var expires = null
    if (expireDays) {
      var exp = new Date()
      exp.setDate(exp.getDate() + expireDays)
      expires = exp.toGMTString()
    }
    document.cookie = name + '=' + escape(value) + (expires ? ';expires=' + expires : '')
  },
  // 获取指定名称cookie
  getCookie: function (name) {
    if (document.cookie.length === 0) {
      return null
    }
    var arr = null
    var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
    if (arr = document.cookie.match(reg)) {
      return unescape(arr[2])
    } else {
      return null
    }
  },
  // 删除cookie
  removeCookie: function (name) {
    if (!this.getCookie(name)) {
      return
    }
    this.setCookie(name, '', -1)
  },
  // 清空cookie
  clearCookie: 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 = null
  if (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 = null
  var 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使用的时候就可以直接用这个工具模块,效率加倍!

标签:封装,name,expires,js,cookie,exp,var,document
From: https://blog.csdn.net/zhouweihua138/article/details/139235216

相关文章

  • JSON里包含的数组中的值 (List数组或对象)转换出来并读取, 通过 hutool 中的API 方法
    hutool 是一个Java工具包,它提供了很多实用的功能,包括JSON的处理。在 hutool 中,你可以使用 cn.hutool.json.JSONUtil 类来解析和处理JSON数据。如果你想要获取JSON中的数组(JSONArray),并遍历读取其中的值(无论是基本类型还是对象),你可以按照以下步骤操作:首先,确保你的项目......
  • Excel小公式快速拆分json数据
    MongoDB导出了一些json格式数据,其实也可以导出csv,经验来看MongoDB导出时候会有objectId,是一种标识符特征.这次拿到了其他组资源的数据,其中的关键列,便于和组内其他资源兼容.用ExcelLEFT&FIND进行拆分的记录人类生活是虚构泡影我的地球OL服务器会被泪水侵染宕机...吗.......
  • 使用nodejs安装并使用vue操作步骤
    1.下载安装nodejs官网下载nodejs并安装,我这边选择Windows的20版本下载地址:https://nodejs.org/en/download/prebuilt-installer安装完成后进入cmd窗口,使用node-v命令检查是否安装成功 如上图所示安装成功 2.配置npm的全局安装路径(npm,nodepakaagemanager,是nodejs的软......
  • js在html里的引用方法
    <!--1.通过事件属性添加js脚本--><buttontype="button"class="default"onclick="alert(this.tagName)">提交</button><!--2.通过script标签添加内部的js脚本,但只能在当前的html中有效--><script>letsum=......
  • Json差异比较
    json差异比较如何比较两个json的差异代码实现导入依赖<dependency><groupId>cn.xiaoandcai</groupId><artifactId>json-diff</artifactId><!--旧版本可能存在某些缺陷。版本请以maven仓库最版为准。--><versi......
  • yii2好用的数组封装函数
    之前用yii2的时候框架封装的几个数组函数很好用,中间换了框架,把函数封装成了util<?phpnamespaceapp\utils;interfaceArrayable{/***Returnsthelistoffieldsthatshouldbereturnedbydefaultby[[toArray()]]whennospecificfieldsarespecified.......
  • node.js 安装( windows)
    node.js安装(windows10专业版) 1.下载node.js软件;官网下载 地址: 2.cmd中安装 node.js; 用管理员身份 打开cmd,进入想安装的盘符 ,再运行如下  命令  :(版本号 对应自己 下载的 版本号)curl-Ohttps://nodejs.org/dist/v14.16.0/node-v14.16.0-x64.msi 改成 ......
  • Java 三大特性之封装(包含构造器,this关键字详解)
    java封装在Java中,面向对象的封装(Encapsulation)是一种将对象的属性和行为(数据和方法)包装在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式来操作该对象的方法。封装的主要目的是增强安全性和简化编程,同时使代码更易于维护和扩展。java封装的特点1.良好的封装能够减少......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......