当前位置:首页 > JavaScript

js实现cookie

2026-04-04 04:58:15JavaScript

设置Cookie

使用document.cookie属性设置Cookie。格式为name=value,可附加可选参数如过期时间、路径、域名等。

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

参数说明:

  • expires:设置过期时间(UTC格式)。
  • path:指定Cookie生效的路径,默认为当前路径。
  • domain:指定域名,默认为当前域名。
  • secure:仅通过HTTPS传输。
  • SameSite:限制跨站请求(Strict/Lax/None)。

读取Cookie

通过document.cookie获取所有Cookie(字符串形式),需手动解析:

function getCookie(name) {
  const cookies = document.cookie.split(';');
  for (let cookie of cookies) {
    const [cookieName, cookieValue] = cookie.trim().split('=');
    if (cookieName === name) return decodeURIComponent(cookieValue);
  }
  return null;
}
console.log(getCookie("username")); // 输出 "John Doe"

删除Cookie

通过设置过期时间为过去的时间来删除Cookie:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

封装工具函数

以下是一个完整的Cookie操作工具示例:

js实现cookie

const CookieUtil = {
  set(name, value, options = {}) {
    let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
    if (options.expires instanceof Date) {
      cookie += `; expires=${options.expires.toUTCString()}`;
    }
    if (options.path) cookie += `; path=${options.path}`;
    if (options.domain) cookie += `; domain=${options.domain}`;
    if (options.secure) cookie += `; secure`;
    if (options.sameSite) cookie += `; SameSite=${options.sameSite}`;
    document.cookie = cookie;
  },

  get(name) {
    const cookies = document.cookie.split(';');
    for (let cookie of cookies) {
      const [cookieName, cookieValue] = cookie.trim().split('=');
      if (cookieName === encodeURIComponent(name)) {
        return decodeURIComponent(cookieValue);
      }
    }
    return null;
  },

  remove(name, path = '/') {
    this.set(name, '', { expires: new Date(0), path });
  }
};

// 使用示例
CookieUtil.set("theme", "dark", { expires: new Date(2025, 11, 31) });
console.log(CookieUtil.get("theme")); // "dark"
CookieUtil.remove("theme");

注意事项

  1. 编码与解码:使用encodeURIComponentdecodeURIComponent处理特殊字符。
  2. 大小限制:单个Cookie通常限制为4KB,每个域名下的Cookie数量有限(约20-50个)。
  3. 安全性:敏感数据避免存入Cookie,优先考虑HttpOnlySecure标记。
  4. 跨域限制:Cookie受同源策略约束,需通过domainpath参数明确作用范围。

标签: jscookie
分享给朋友:

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…