本地存储:cookie、localStorage

本文详细介绍了HTTP的两种本地存储方式:cookie和localStorage。讲解了cookie的基本用法、属性,包括名称、值、失效时间、domain、path、httpOnly和secure标志。对于localStorage,介绍了其特点、使用方法、与其他存储方式的区别以及封装技巧。同时,文章指出cookie的存储容量小,localStorage的存储容量较大但内容不会随浏览器关闭而清除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、cookie

1. 是什么

  • cookie全称 HTTP Cookie
  • 是浏览器存储数据的一种方式,存储在用户本地,属于本地存储
  • 一般会随着浏览器的请求发送到服务器端

2. cookie的作用

  • 存储
  • 跟踪统计用户访问该网站的习惯,如:什么时间访问、访问了哪些页面、每个网页停留的时间
  • 不能在cookie中存储敏感信息

3. 基本用法

  • 写入cookie:document.cookie = ‘name=value’,多个名值对需要一个一个分别设置,但如果需要设置其他属性可以“; ”(分号加空格)分隔
  • 读取cookie:document.cookie ,读取到的是由名值对构成的字符串,每个名值对之间用“; ”(分号和一个空格)隔开;读取到的是所有的cookie内容

4. cookie的属性

4.1 cookie的名称(name)和值(value)

  • 是cookie最重要的两个属性,创建cookie时的必填项!!
  • cookie的名或值如果包含非英文字母,则需要使用encodeURIComponent() 编码,读取时使用decodeURIComponent()解码
  • 一般名称使用英文,最好不要用中文名称,值可以用中文,但要记得编码

4.2 失效(到期)时间

  • 失效的cookie会被浏览器清除
  • 没有设置失效时间的cookie,称为会话cookie(session)。会话cookie存在内存中,当会话结束,即浏览器关闭时,会话cookie就会消失
  • 可以通过 expiresmax-age 设置cookie失效时间。
  • expires 的值是 Date() 类型的,max-age值为数字类型的,单位是,表示当前时间 + 多少秒后过期
  • max-age的值如果是 0 或者 负数,则cookie会被清除
document.cookie = `name=dudu; expires=${new Date('2035-01-12 09:12:31')}`
    document.cookie = `age=21; max-age=5` // 存放5秒
    document.cookie = `sex=girl; max-age=${24 * 30 * 3600}` //存放30天

 4.3  domain

  • 限定不同域名下cookie访问范围
  • 通过JS只能读写当前域或父域的cookie,无法读写其它域的cookie

4.4  path路径

  • 限定同一域名下cookie访问范围

当name、domain、path三个字段都相同时,才是属于同一个cookie

4.5 httpOnly

  • 设置了该属性的cookie则不能通过JS去访问

4.6 secure安全标志

  • 限定了只有使用 https 而非http的情况下才可以发送给服务器端

domain、path、secure都满足条件,且没有过期的cookie才会随着请求发送到服务器

5. cookie的封装

// 写入cookie
// {maxAge,domian,path,secure}={} :当没有传值时默认为空
const set = (name,value,{maxAge,domain,path,secure}={}) => {
  let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`
  if(typeof maxAge === 'number') {
    cookieText += `; max-age=${maxAge}`
  }
  if(domain) {
    cookieText += `; domain=${domain}`
  }
  if(path) {
    cookieText += `; path=${path}`
  }
  if(secure) {
    cookieText += `; secure}`
  }
  document.cookie = cookieText
}

// 通过name获取cookie的value值
const get = name => {
  // 确保可以读取到值,避免因为中文出错
  name = `${encodeURIComponent(name)}`
  const cookies = document.cookie.split('; ')
  for(const item of cookies) {
    const [cookieName,cookieValue] = item.split('=')
    if(cookieName === name) {
      return decodeURIComponent(cookieValue)
    }
  }
  return
}

// 通过name、domain、path删除cookie
const remove = (name,{domain,path}={}) => {
  // max-age的值如果是 0 或者 负数,则cookie会被清除
 set(name,'',{domain,path,maxAge:0})
}
export {
  set,
  get,
  remove
}
  • 每个域名下的cookie有数量限制,当超过限制后在设置cookie,浏览器会删除之前设置的cookie
  • 每个cookie的存储容量很小,最多4kb左右,不同浏览器有不同

二、localStorage

1. 是什么

  • localStorage也是浏览器存储数据的方式,但是它只会存储在本地,不会发送到服务器
  • 单个域名下的localStorage总大小有限制,数值与浏览器相关

2. 使用

  • 存储数据:localStorage.setItem(key,value)
  • 查看长度:localStorage.length
  • 读取数据:localStorage.getItem(key)
  • 删除数据:localStorage.removeItem(key)
  • 清空数据:localStorage.clear()

3. 其他

  • localStorage存储的内容不会随浏览器关闭而清除,需要手动清除(js删除、清除浏览器缓存)
  • sessionStorage存储的内容会随浏览器窗口的关闭而被清除
  • localStorage 存储的键和值必须是字符串类型
  • 不同域名不可以共用localStorage
  • IE7及以下版本不支持localStorage     查看兼容性

4. localStorage的封装

// 简化写法,避免每次写localStorage
const storage = window.localStorage

// 设置
const set = (key,value) => {
  storage.setItem(key,JSON.stringify(value))
}

// 读取数据
const get = key => {
 return JSON.parse(storage.getItem(key))
}

// 删除数据
const remove = key => {
  storage.removeItem(key)
}

// 清空数据
const clear = () => {
  storage.clear()
}

export {
  set,
  get,
  remove,
  clear
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值