JavaScript Cookie 设置、获取与删除详解及通用函数封装

许南星
许南星
发布时间:2026-10-15 | 4人浏览过
原创

本文介绍如何在 JavaScript 中操作 Cookie,包括如何设置、读取和删除数据。文章详细解析了 document.cookie 的用法,讲解了有效期(expires)、路径(path)和域名(domain)等关键参数的配置方法,最后提供了一套通用的 Cookie 处理函数封装,可直接应用于实际项目开发。

Cookie 的基本概念与设置

每个 Cookie 本质上是一个名/值对(name-value pair)。在 JavaScript 中,可以通过赋值给 document.cookie 属性来创建或修改 Cookie。需要注意的是,直接赋值不会覆盖同名的旧 Cookie,而是会添加一个新的记录;若要更新某个特定 Cookie 的值,需要重新为其赋予相同的名称和新值。

基础设置语法:

document.cookie = "userId=828";

如果需要同时存储多个名/值对,可以使用分号加空格(; )进行分隔:

document.cookie = "userId=828; userName=hulk";

注意事项:

  • Cookie 的名或值中不能直接使用分号(;)、逗号(,)、等号(=)以及空格。
  • 对于包含特殊字符或中文的值,建议使用 escape() 函数进行编码,避免乱码问题。例如:document.cookie = "str=" + escape("I love ajax")。
  • 解码时需使用 unescape() 函数还原原始数据。

获取 Cookie 的值

由于 document.cookie 返回的是当前域名下所有 Cookie 组成的字符串(格式为 name1=value1; name2=value2),因此无法直接通过名称获取单个值,必须自行解析字符串。

解析步骤:

  1. 获取字符串:使用 var strCookie = document.cookie。
  2. 分割数组:使用 split("; ") 将字符串拆分为名/值对数组。
  3. 遍历查找:遍历数组,再次以 = 分割找到目标名称对应的值。

代码示例:

<script type="text/javascript">
// 假设已设置两个 cookie
var strcookie = document.cookie;
var arrcookie = strcookie.split(";");
var userId;

for(var i=0; i<arrcookie.length; i++) {
    var arr = arrcookie[i].split("=");
    if("userId" == arr[0]) {
        userId = arr[1];
        break;
    }
}
console.log(userId);
</script>

Cookie 的生命周期与控制参数

默认情况下创建的 Cookie 是会话 Cookie(Session Cookie),即浏览器关闭后即消失。为了实现持久化存储或精确控制访问范围,需设置以下参数:

第1步:设置过期时间(expires)

若需长期保存用户登录状态等信息,可设置 expires 参数。其值为 GMT 格式的日期字符串。超过该时间的 Cookie 将被浏览器自动删除。

示例:设置10天后过期

<script type="text/javascript">
var date = new Date();
var expireDays = 10;
// 将当前时间戳加上10天的毫秒数
var expDate = new Date(date.getTime() + expireDays*24*60*60*1000);
document.cookie = "userId=828; userName=hulk; expires=" + expDate.toGMTString();
</script>

第2步:删除 Cookie

删除 Cookie 最简单的方法是将其过期时间设置为过去的时间。浏览器会自动移除已过期的 Cookie。

示例:

<script type="text/javascript">
var date = new Date();
// 设置为过去的时间(例如减去1秒)
date.setTime(date.getTime() - 10000);
document.cookie = "userId=828; expires=" + date.toGMTString();
</script>

第3步:指定可访问路径(path)

默认情况下,Cookie 只能在创建它的目录及其子目录下访问。通过 path 参数可以扩大或限制 Cookie 的作用范围。

  • path=/shop:仅在当前网站 /shop 目录下可用。
  • path=/:使 Cookie 对整个网站的所有页面均可用(推荐用于全局状态)。

第4步:指定可访问主机名(domain)

默认情况下,一个主机创建的 Cookie 不能被其他主机访问。通过 domain 参数可以实现子域名之间的共享。

示例:

// 允许 .google.com 下的所有子域名(如 www.google.com, mail.google.com)访问
document.cookie = "name=value; domain=.google.com";

通用的 Cookie 处理函数封装

考虑到原生操作较为繁琐且容易出错,在实际开发中通常封装一套工具函数来实现 Cookie 的增删改查。

1. 添加 Cookie 函数

addCookie(name, value, expireHours)

接收 Cookie 名称、值和过期小时数。若 expireHours 为 0 或不传,则不设置过期时间(会话级)。

2. 获取 Cookie 函数

getCookie(name)

根据名称返回对应的值,未找到则返回空字符串。

3. 删除 Cookie 函数

deleteCookie(name)

通过将过期时间设为过去时间来删除指定 Cookie。

完整参考代码(优化版):

<script type="text/javascript">
// 添加 Cookie
function setCookie(name, value, days) {
    var exp = new Date();
    exp.setTime(exp.getTime() + (days||0)*24*60*60*1000); // 默认为会话级别
    document.cookie = name + "=" + escape(value) + ((days==null) ? "" : ";expires=" + exp.toGMTString());
}

// 获取 Cookie
function getCookie(name) {
    var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
    if(arr != null) return unescape(arr[2]);
    return null;
}

// 删除 Cookie
function delCookie(name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var val = getCookie(name);
    if(val != null) document.cookie = name + "=" + val + ";expires=" + exp.toGMTString();
}

// 测试使用
setCookie("testUser", "admin", 7);
alert(getCookie("testUser"));
// delCookie("testUser");
</script>

上述封装解决了手动拼接字符串和解析逻辑的重复工作,同时也包含了基础的编码解码处理,更适合嵌入到大型项目中。

以上就是 JavaScript Cookie 设置获取删除操作方法的详细内容,更多关于 JavaScript 前端存储的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表