Loading

Web前端存储之 cookie、sessionStorage 和 localStorage

Web前端存储之 cookie、sessionStorage 和 localStorage

一、cookie

客户端的 cookie 主要通过 key=value 的形式用于存储 web 页面的用户信息等,当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。服务端通过这种方式来获取用户的信息。存储数据大小大约是:4 K

用法

各个字段说明:

name: key值
value: value值
expires: 过期时间,GMT 是以格林威治标准时间来判断,不受本地时区影响。若不设置有效期或设置有误未被识别,则默认永久
path: 可以访问 cookie 的路径
domain:为可以访问此cookie的域名
size:设置cookie的大小
http:cookie 的httponly属性。若为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie
secure:设置是否只能通过https来传递此条cookie
1. 创建cookie

document.cookie="username=yyy;expires=Sat, 03 Jul 2021 08:40:00 GMT; path=/"

2. 读取cookie

// 以下语句获取的是所有在有效期内的cookie字符串

let cookies = document.cookie

3. 修改cookie

// 修改 cookie 类似于创建 cookie,旧的 cookie 将被覆盖

document.cookie="username=ypf;expires=Sat, 03 Jul 2021 08:40:00 GMT; path=/"

4. 删除cookie

// 删除 cookie 只需要设置 expires 参数为以前的时间即可。当删除时不必指定 cookie 的值

document.cookie="username=ypf;expires=Sat, 03 Jul 2021 08:00:00 GMT; path=/"


/*
 * @Date: 2021-07-03 19:44:27
 * @information: cookie 封装方法
 */

var CookieUtil = {
  /**
   * 设置cookie
   * @param key key值
   * @param value value值
   * @param exp 有效时长 毫秒级的时间戳格式 默认当天23:59:59过期
   */
  setCookie: function (key, value, exp) {
    if (!key) return;
    let curDate = new Date()
    // 当前时间戳
    let curStamp = curDate.getTime()
    let leftTime = new Date()
    if (exp) {
      leftTime.setTime(curStamp + exp)
    } else {
      // 当前日期
      let curDay = curDate.toLocaleDateString()
      // 当日0点之前的时间戳
      let nowDayPassedStamp = 0
      nowDayPassedStamp = new Date(curDay).getTime() - 1
      // 当日已过去的时间戳
      let passedStamp = curStamp - nowDayPassedStamp
      // 当日剩余时间戳
      let leftStamp = 24 * 60 * 60 * 1000 - passedStamp
      leftTime.setTime(curStamp + leftStamp)
    }
    // 创建cookie
    document.cookie = key + '=' + value + ';expires=' + leftTime.toGMTString() + ';path=/'
  },

  /**
   * 获取cookie
   */
  getCookie: function (key) {
    if (!key) return;
    let cookieStr = document.cookie.replace(/\s/g, '')
    let cookieArr = cookieStr.split(';')
    for (let i = 0; i < cookieArr.length; i++) {
      let keyArr = cookieArr[i].split('=')
      if (keyArr[0] == key) return keyArr[1]
    }
  },

  /**
   * 删除cookie
   */
  removeCookie: function (key) {
    let time = new Date(0) - 1
    this.setCookie(key, '', time)
  }
}

二、storage

对浏览器来说,使用 Web Storage 存储键值对比存储 Cookie 方式更直观,而且容量更大,它包含两种:localStorage 和 sessionStorage。存储数据大小一般都是:5 MB

sessionStorage(临时存储)

为每一个数据源维持一个存储区域,在浏览器的此标签页打开期间存在,包括此标签页的页面重新加载

localStorage(长期存储)

与 sessionStorage 一样,但是浏览器关闭后,数据依然会一直存在

用法

sessionStorage 和 localStorage 的用法基本一致,引用类型的值需要转换成 JSON 进行存储

1. 保存数据到本地
let obj = {
    name: 'xiaoming',
    age: 18,
    birthday: '2000-01-01',
}

sessionStorage.setItem('userInfo', JSON.stringify(obj))

localStorage.setItem('userInfo', JSON.stringify(obj))

// 注:若第二次存储的 key 值与第一次存储的 key 值相同,则会覆盖第一次的值
2. 从本地读取数据
let obj1 = JSON.parse(sessionStorage.getItem('userInfo'))

let obj2 = JSON.parse(localStorage.getItem('userInfo'))
3. 从本地删除指定 key 值
sessionStorage.removeItem('userInfo')

localStorage.removeItem('userInfo')
4. 清空存储的所有值
sessionStorage.clear()

localStorage.clear()
posted @ 2020-03-10 10:02  卡布奇诺y  阅读(1015)  评论(0编辑  收藏  举报