百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JavaScript学习笔记(二十六)——cookie

myzbx 2025-09-29 08:31 14 浏览

COOKIE

  • cookie 是一个以字符串的形式存储数据的位置
  • 每一个 HTTP 请求都会在请求头中携带 cookie 到服务端
  • 每一个 HTTP 响应都会在响应头中携带 cookie 到客户端
  • 也就是说,cookie 是不需要我们手动设置,就会自动在 客户端 和 服务端之间游走的数据
  • 我们只是需要设置一下 cookie 的内容就可以

COOKIE 的存储形式

  • cookie 是以字符串的形式存储,在字符串中以 key=value 的形式出现
  • 每一个 key=value 是一条数据
  • 多个数据之间以 ; 分割
// cookie 的形态
'a=100; b=200; c=300;'

COOKIE 的特点

  1. 存储大小有限制,一般是 4 KB 左右
  2. 数量有限制,一般是 50 条左右
  3. 有时效性,也就是有过期时间,一般是 会话级别(也就是浏览器关闭就过期了)
  4. 有域名限制,也就是说谁设置的谁才能读取

使用方式

  • 读取 cookie 的内容使用 document.cookie
const cookie = document.cookie
console.log(cookie) // 就能得到当前 cookie 的值
  • 设置 cookie 的内容使用 document.cookie
// 设置一个时效性为会话级别的 cookie
document.cookie = 'a=100'

// 设置一个有过期时间的 cookie
document.cookie = 'b=200;expires=Thu, 18 Dec 2043 12:00:00 GMT";'
// 上面这个 cookie 数据会在 2043 年 12 月 18 日 12 点以后过期,过期后会自动消失
  • 删除 cookie 的内容使用 document.cookie
// 因为 cookie 不能直接删除
// 所以我们只能把某一条 cookie 的过期时间设置成当前时间之前
// 那么浏览器就会自动删除 cookie
document.cookie = 'b=200;expires=Thu, 18 Dec 2018 12:00:00 GMT";'

COOKIE 操作封装

  • 因为 js 中没有专门操作 COOKIE 增删改查的方法
  • 所以需要我们自己封装一个方法

设置 cookie

/**
 * setCookie 用于设置 cookie
 * @param {STRING} key  要设置的 cookie 名称
 * @param {STRING} value  要设置的 cookie 内容
 * @param {NUMBER} expires  过期时间
 */
function setCookie (key, value, expires) {
  const time = new Date()
  time.setTime(time.getTime() - 1000 * 60 * 60 * 24 * 8 + expires) // 用于设置过期时间

  document.cookie = `${key}=${value};expires=${time};`
}

读取 cookie

/**
 * getCookie 获取 cookie 中的某一个属性
 * @param {STRING} key 你要查询的 cookie 属性
 * @return {STRING} 你要查询的那个 cookie 属性的值
 */
function getCookie(key) {
  const cookieArr = document.cookie.split(';')

  let value = ''

  cookieArr.forEach(item => {
    if (item.split('=')[0] === key) {
      value = item.split('=')[1]
    }
  })

  return value
}

删除 cookie

/**
 * delCookie 删除 cookie 中的某一个属性
 * @param {STRING} name 你要删除的某一个 cookie 属性的名称
 */
function delCookie(name) {
  setCookie(name, 1, -1)
}

相关推荐

vue3和web网页直接操作微信小程序云开发数据库

我们开发好小程序以后,有时候需要编写一个管理后台网页对数据库进行管理,之前我们只能借助云开发自带的cms网页,但是cms网页设计的比较丑,工作量和代码量也不够,所以我们今天就来带大家实现用vue3编写...

WebCurl:极致轻量的跨平台 HTTP 请求调试工具

在接口开发与测试领域,工具的轻量化、兼容性与安全性往往直接影响工作效率。WebCurl作为一款纯原生、无依赖的网页版API测试与调试工具,凭借极简架构与全场景适配能力,重新定义了接口调试工具的使...

webapi 全流程_webapi项目

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

CodeSpirit.Amis.AiForm 智能表单使用指南

概述AiForm是CodeSpirit.Amis框架的智能表单功能,专为AI驱动的长时间处理任务设计。它自动生成一个多步骤的用户界面,包含表单输入、进度监控、日志显示和结果展示等功能。功能特点...

初级、中级、高级前端工程师,对于form表单实现的区别

在React项目中使用AntDesign(Antd)的Form组件能快速构建标准化表单,特别适合中后台系统开发。以下是结合Antd的最佳实践和分层实现方案:一、基础用法:快速搭...

Bun v0.7 大版本发布,与 Vite 牵手来破局?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。今天给大家带来...

「前端」界面可视化开发框架formio.js

简介formio是一个前端可视化开发框架,无需写css/js就可以开发一套前端界面。直接在界面内拖拽就可以完成界面的布局及开发。数据交互也是固定的,表单校验也可以配置,功能非常强大。特性使用ES6...

小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?

Http请求中FormData和RequestPayload两种参数的区别?AjaxPost请求中常用的两种的形式:formdata和requestpayload一、默认的表单方式...

WinForm + Win32 API 自定义无边框窗口实战(工业软件必备)

前言随着.NET9.0AOT(Ahead-of-Time)的发布,便萌生了用代码测试AOT编译效果的想法,同时评估未来是否为NanUI开发支持AOT编译的新版本。关于NanUI项目,若大家尚未了...

DeepSeek从入门到精通(11)——网页版、APP、API使用方式比较

DeepSeek提供了三种主要的使用方法:网页版、手机APP和API调用。这三种方式各有特点,适用于不同的使用场景。下面从使用方法和主要特点两方面进行比较:一、网页版使用方法:直接通过浏览器访问De...

初略Web API Notification 桌面通知

HTML5WebNotificationsAPI通知接口用于向用户配置和显示桌面通知弹窗。例如,Email邮件通知、来电提醒、聊天信息提醒或任务提醒等。关于Web开发技术中Notificat...

什么是API网关?——驱动数字化转型的“隐形冠军”

什么是API网关API网关(APIGateway)是一个服务器,位于应用程序和后端服务之间,提供了一种集中式的方式来管理API的访问。它是系统的入口点,负责接收并处理来自客户端的请求,然后将请求路由...

.NET 7使用 Entity Framework Core 制作增删改查(CRUD) Web API 教程

在本文中,我们将使用EntityFrameworkCore(EFCore)实现一个.NET7WebAPICRUD示例。WebAPI是一个构建HTTP服务的框架,可以从浏览器、移动设备和...

C# ASP.NET Core Web Api 与 MVC 模式下 body 参数传递,post 参数方式

在ASP.NETCore中,WebAPI和MVC模式在处理HTTP请求时,特别是POST请求,使用body参数来传递数据的方式非常相似。两者都使用模型绑定来自动将请求体中的数据映射到C#对象上。下...