cookie的属性 封装一个cookie模块 包括setCookie getCookie removeCookie 并导出使用

289 阅读2分钟

前置知识

打开浏览器,在application里面就可以看出cookie的属性有name, value, Domain, Path, Expires/Max-Age, HttPOnly, Secure

在浏览器的控制台添加cookie,一次只能添加一个,比如我们要把name和sex添加进去,并加上过期时间max-age,代码如下

添加namedocument.cookie="name=zhangsan; max-age=10

添加sexdocument.cookie="sex=male;max-age=10"

获取cookie:document.cookie,然后回车,在控制台显示出来了所有的cookie name=zhangsan;sex=male

有了这样的前置知识,我们就可以开始封装cookie

封装到一个index.js里面,封装好以后导出去export{}

包括设置,获取和删除setCookie getCookie removeCookie **完整代码如下

用到的知识点有:

结构赋值,用数组来接收 const []= item.split("=) 把字符串转成数组并用分号隔开split()

// cookie里面的属性包括name value domain maxage path
// 必填的有  name,value,另外3个先给默认给一个空
const setCookie = (name, value, { domain, maxAge, path } = {}) => {
  // 在控制台设置cookie
  // document.cookie = `name=zhangsan; max-age=10`
  // 根据同样的语法来封装
  let cookieString = `${name}=${value}`;
  // 如果有过期时间,就在原来的cookie后面加上maxage
  if (typeof maxAge === "number") {
    // 用分号隔开
    cookieString += `; max-age=${maxAge}`;
  }
  // 如果设置了路径,就把路径继续加上
  if (path) {
    cookieString += `; path=${path}`;
  }
  //   设置完了name value path maxage,就用docment.cookie把cookie写进去
  document.cookie = cookieString;
};
// 获取cookie的逻辑
//在控制台获取是document.cookie能得到所有cookie的内容
const getCookie = (name) => {
  // 把所有得到的cookie的字符串内容先转成数组,用分号和空格隔开
  const cookieArray = document.cookie.split("; ");
  let cookieName;
  let cookieValue;
  // 遍历得到的数组
  for (const item of cookieArray) {
    // 遍历以后的值,再转成数组,用等号分开
    // 用结构赋值的方式,从数组里面后去我们想要的,把结构赋值后的放到一个数组里面
    [cookieName, cookieValue] = item.split("=");
    // 定义函数的时候,参数是name,也就是说我们要获取的是name
    if (cookieName === name) {
      return cookieValue;
    }
  }
  // for循环结束,如果里面没找到cookie,返回false
  return
};
// 删除cookie就是在removeCookie里面调用 setCookie(),里面加上过期时间
const removeCookie = (name) => {
    setCookie(name,'',{maxAge:0})
};


export { setCookie, getCookie, removeCookie };


可以在html里面调用import{}from"封装好的cookie,然后open with live server在浏览器中查看

因为导入了模块,所以在html里面要加上type="module"

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script type="module">
      import { setCookie, getCookie, removeCookie } from "./index.js";
      // 设置cookie
      setCookie("name", "zhangsan");
      // 获取cookie,需要打印才能显示在控制台
      console.log(getCookie("name"));
        // 删除cookie
        // removeCookie("name");
        // 获取 更新后的cookie
        // getCookie("name");
    </script>
  </body>
</html>