1,什么是 Cookie?

Cookie是一些数据, 存储于你电脑上的文本文件中。

web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。Cookie的作用就是用于解决如何记录客户端的用户信息。当用户访问web页面时,他的名字可以记录在Cookie中。在该用户下一次访问该页面时,可以在Cookie中读取该用户的访问记录。

  • 当浏览器从服务器上请求web页面时, 属于该页面的Cookie会被添加到该请求中。服务端可以通过这种方式来获取用户的信息。

1.1,存储形式

Cookie以键值对形式存储,如下所示:

  1. userName=pony

1.2,常用属性

属性 用处 默认值
Name
Value
Domain 允许访问的域 当前域
Path 允许访问的路径 当前路径
Expires / Max-Age 过期时间 关闭页面即清除(Session)
Size 占用字节大小 无需设置

1.3,大小限制

浏览器 大小 (KB) 每个域存储个数限制
Firefox 4
Safari 4
Opera 4 30
IE 4 50
Edge 4 50
Chrome 4 50

2,增 or 改Cookie

  1. /**
  2. * 设置cookie
  3. * @param {String} key 键
  4. * @param {String} value 值
  5. * @param {String} expires 过期时间(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss 或 时间戳) => default:页面关闭即过期(Session)
  6. * @param {String} domain 域 => default:当前域
  7. * @param {String} path 路径 => default:/
  8. */
  9. function setCookie(key, value, expires = '', domain = window.location.hostname, path = '/') {
  10. const time = expires ? new Date(expires) : expires
  11. console.log(time)
  12. const cookie = `${key}=${value}; expires=${time}; domain=${domain}; path=${path}`
  13. document.cookie = cookie
  14. }

调用例子:

  1. setCookie('user', '我是你爸爸', '2022-02-20 16:29:00').
  2. // 或者
  3. setCookie('user', '我是你爸爸', '2022-02-20')
  4. // 或者
  5. const timestamp = new Date('2022-10-01').getTime()
  6. setCookie('user', '我是你爸爸', timestamp)

3,查Cookie

  1. /**
  2. * 获取所有cookie的key
  3. * @return {Array<string>} Cookie键组成的数组
  4. */
  5. function getAllCookieKey() {
  6. const Cookie = document.cookie
  7. const cookieList = Cookie.split('; ')
  8. return cookieKeyList = cookieList.map(item => {
  9. return item.split('=')[0]
  10. })
  11. }
  12. /**
  13. * 根据cookie的key获取对应的值
  14. * @param {String} key 键
  15. * @return {String} value 值
  16. */
  17. function cookieKeyGetValue(key) {
  18. const Cookie = document.cookie
  19. const cookieList = Cookie.split('; ')
  20. const cookieKeyList = cookieList.map(item => {
  21. return item.split('=')[0]
  22. })
  23. const index = cookieKeyList.indexOf(key)
  24. return cookieList[index].split('=')[1]
  25. }

4,删Cookie

  1. /**
  2. * 根据key清除cookie
  3. * @param {String} key 键
  4. * @param {String} domain 域 => default:当前域
  5. * @param {String} path 路径 => default:/
  6. */
  7. function clearCookie(key, domain = window.location.hostname, path = '/') {
  8. const Time = new Date()
  9. Time.setTime(Time.getTime() + -1 * 24 * 60 * 60 * 1000)
  10. const expires = `expires=${Time.toUTCString()}`
  11. document.cookie = `${key}=; ${expires}; path=${path}; domain=${domain}`
  12. }
  13. // 清除所有cookie
  14. function clearAllCookie() {
  15. const cookieKeyList = getAllCookieKey()
  16. for (let key of cookieKeyList) {
  17. clearCookie(key)
  18. }
  19. }

如果看了觉得有帮助的,我是@鹏多多,欢迎 点赞 关注 评论;END


PS:在本页按F12,在console中输入document.querySelectorAll('.diggit')[0].click(),有惊喜哦


公众号

往期文章

个人主页

超详细的Cookie增删改查的更多相关文章

  1. 网络系列之 cookie增删改查(封装)

    什么是cookie 呢?简单来说,这个小东西,会记录你的 浏览器 浏览习惯,或 账号密码等, 以便于提高用户的体验感. 举个例子: 你们有没有发现,去淘宝一些购物网站, 你搜索了 椅子, 挑选了一会椅 ...

  2. js对cookie增删改查的封装

    /** * 获取cookie * @param name * @returns {*} */ function getCookie(name) { var cookieArr = document.c ...

  3. Java管理Cookie增删改查操作。

    Cookie属性 了解这几个属性之后,就知道如何进行Cookie的操作了. name Cookie的名称. value Cookie的值. maxAge Cookie的失效时间,有以下几种值,默认为- ...

  4. 超详细的DOM操作(增删改查)

    操作DOM的核心就是增删改查 原文地址:https://jianshu.com/p/b0aa846f4dcc 目录 一.节点创建型API 1.1 createElement 1.2 createTex ...

  5. Java web 简单的增删改查程序(超详细)

    就是简单的对数据进行增删改查.代码如下: 1.bean层:用来封装属性及其get set方法 toString方法,有参构造方法,无参构造方法等. public class Bean { privat ...

  6. sqlHelper做增删改查,SQL注入处理,存储值,cookie,session

    一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ...

  7. sqlite数据库操作详细介绍 增删改查,游标

    sqlite数据库操作详细介绍 增删改查,游标     本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code     package com.example ...

  8. Selenium入门13 cookie的增删改查

    cookie的增删改查: 查询:get_cookies()查询所有cookie,get_cookie(cookie的name)获取单个cookie 删除:delete_cookie(cookie的na ...

  9. SSMybatis整合 --详细解读Mybatis对oracle数据库进行增删改查(一)

    Mybatis是现在主流的持久化层框架,与Hibernate不同的是,它鼓励程序员使用原声SQL语句对数据库进行操作.因此提供了非常灵活的功能.特别是当数据库同时访问数过多,需要进行优化时,使用sql ...

随机推荐

  1. HTTP协议层面绕过WAF

    最近也是在一直看过waf相关的资料,本次主要是想写写HTTP协议层面过WAF的一些技巧,来与大家一同探讨 原理 给服务器发送payload数据包,使得waf无法识别出payload,当apache,t ...

  2. Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  3. 基础概念(1):cc是什么

    cc是什么? "人和程序,有一个能跑就行",意思是上班写代码,要么程序运行起来,要么人滚蛋.程序怎么才能运行起来呢?先要写出来,再编译成可执行的二进制,之后就可以跑起来了.这里重要 ...

  4. prometheus+exporter小测试:

    1.golang中使用expoter import ( "github.com/prometheus/client_golang/prometheus/promhttp" ) fu ...

  5. RT-Thread移植到stm32

    一.移植RT-Thread准备 RT-Thread源码 源码版本和下载方式,可以参考RT-Thread移植入门学习. keil软件 STM32工程项目模板 因为每一厂家提供的库文件可能有一些区别,在移 ...

  6. 【数据结构】K-D Tree

    K-D Tree 这东西是我入坑 ICPC 不久就听说过的数据结构,但是一直没去学 QAQ,终于在昨天去学了它.还是挺好理解的,而且也有用武之地. 目录 简介 建树过程 性质 操作 例题 简介 K-D ...

  7. 微服务架构 | 4.2 基于 Feign 与 OpenFeign 的服务接口调用

    目录 前言 1. OpenFeign 基本知识 1.1 Feign 是什么 1.2 Feign 的出现解决了什么问题 1.3 Feign 与 OpenFeign 的区别与对比 2. 在服务消费者端开启 ...

  8. 安卓开发常见Bug-项目未升级到Androidx

    当项目未升级到androidx时,会出现某些项目文件资源不匹配的问题,建议在建立项目后就将项目升级到androidx 点击升级到androidx Migrate迁移然后点击左下角Dorefactor

  9. Java多线程专题3: Thread和ThreadLocal

    合集目录 Java多线程专题3: Thread和ThreadLocal 进程, 线程, 协程的区别 进程 Process 进程提供了执行一个程序所需要的所有资源, 一个进程的资源包括虚拟的地址空间, ...

  10. TCP Wrappers

    TCP Wrappers 是 RHEL 7 系统中默认启用的一款流量监控程序,它能够根据来访主机的地址与本机的目标服务程序作出允许或拒绝的操作.换句话说,Linux 系统中其实有两个层面的防火墙,第一 ...