菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS 首页 JS 简介 JS 何处使用 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组常量 JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS Math JS 随机数 JS 布尔值 JS 比较 JS If Else JS Switch JS For 循环 JS For In 循环 JS For Of 循环 JS While 循环 JS Break JS 可迭代对象 JS Set JS Set 方法 JS Map JS Map 方法 JS Typeof JS 类型转换 JS 解构 JS 位运算 JS RegExp JS 优先级 JS 错误 JS 作用域 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 风格指南 JS 最佳实践 JS 常见错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象 Get / Set 对象保护

JS 函数

函数定义 函数参数 函数调用 函数 Call 函数 Apply 函数 Bind 函数闭包

JS 类

类入门 类继承 类静态

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 入门 DOM 方法 DOM Document DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Web APIs

Web API 入门 Web 表单 API Web History API Web Storage API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

AJAX 入门 AJAX XMLHttp AJAX Request AJAX Response AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 示例

JS JSON

JSON 入门 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON Stringify JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS Graphics

JS Graphics JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 测验 JS 网站 JS 面试准备 JS Bootcamp JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript Cookie


Cookie 让您可以在网页中存储用户信息。


什么是 Cookie?

Cookie 是存储在您计算机上小型文本文件中的数据。

当 Web 服务器向浏览器发送网页后,连接就会关闭,服务器会忘记关于用户的一切。

发明 Cookie 是为了解决“如何记住用户信息”的问题。

  • 当用户访问网页时,他/她的名字可以存储在一个 Cookie 中。
  • 下次用户访问该页面时,Cookie 会“记住”他/她的名字。

Cookie 以名称-值对的形式保存,例如

username = John Doe

当浏览器向服务器请求网页时,属于该页面的 Cookie 会添加到请求中。通过这种方式,服务器可以获取必要的数据来“记住”用户信息。

如果您的浏览器关闭了本地 Cookie 支持,以下任何示例都将无法工作。


使用 JavaScript 创建 Cookie

JavaScript 可以使用 document.cookie 属性创建、读取和删除 Cookie。

使用 JavaScript,可以像这样创建 Cookie:

document.cookie = "username=John Doe";

您还可以添加一个过期日期(以 UTC 时间表示)。默认情况下,当浏览器关闭时,Cookie 会被删除。

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

通过路径参数,您可以告诉浏览器 Cookie 属于哪个路径。默认情况下,Cookie 属于当前页面。

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


使用 JavaScript 读取 Cookie

使用 JavaScript,可以像这样读取 Cookie:

let x = document.cookie;

document.cookie 将以一个字符串的形式返回所有 Cookie,类似于:cookie1=value; cookie2=value; cookie3=value;


使用 JavaScript 更改 Cookie

使用 JavaScript,您可以像创建 Cookie 一样更改它:

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

旧的 Cookie 将被覆盖。


使用 JavaScript 删除 Cookie

删除 Cookie 非常简单。

删除 Cookie 时无需指定 Cookie 值。

只需将 expires 参数设置为一个过去日期:

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

您应该定义 Cookie 路径以确保删除正确的 Cookie。

如果您不指定路径,某些浏览器将不允许您删除 Cookie。


Cookie 字符串

document.cookie 属性看起来像一个普通的文本字符串。但它不是。

即使您将整个 Cookie 字符串写入 document.cookie,当您再次读取它时,您只能看到它的名称-值对。

如果您设置一个新 Cookie,旧的 Cookie 不会被覆盖。新 Cookie 会添加到 document.cookie 中,因此如果您再次读取 document.cookie,您将得到类似以下内容:

cookie1=value; cookie2=value;

     

如果您想查找某个指定 Cookie 的值,您必须编写一个 JavaScript 函数,在该 Cookie 字符串中搜索 Cookie 值。


JavaScript Cookie 示例

在接下来的示例中,我们将创建一个存储访问者姓名的 Cookie。

当访问者第一次访问网页时,会要求他/她填写姓名。然后该姓名会存储在 Cookie 中。

下次访问者访问同一页面时,他/她将收到欢迎消息。

对于此示例,我们将创建 3 个 JavaScript 函数:

  1. 一个设置 Cookie 值的函数
  2. 一个获取 Cookie 值的函数
  3. 一个检查 Cookie 值的函数

一个设置 Cookie 的函数

首先,我们创建一个 函数,它将访问者的姓名存储在一个 Cookie 变量中:

示例

function setCookie(cname, cvalue, exdays) {
  const d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  let expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

示例说明

上述函数的参数是 Cookie 的名称 (cname)、Cookie 的值 (cvalue) 和 Cookie 应过期前的天数 (exdays)。

该函数通过将 Cookie 名称、Cookie 值和过期字符串连接起来来设置 Cookie。


一个获取 Cookie 的函数

然后,我们创建一个 函数,该函数返回指定 Cookie 的值:

示例

function getCookie(cname) {
  let name = cname + "=";
  let decodedCookie = decodeURIComponent(document.cookie);
  let ca = decodedCookie.split(';');
  for(let i = 0; i <ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

函数解释

将 Cookie 名称作为参数 (cname)。

创建一个变量 (name),其中包含要搜索的文本 (cname + "=")。

解码 Cookie 字符串,以处理带有特殊字符(例如 '$')的 Cookie。

将 document.cookie 按分号拆分为一个名为 ca 的数组 (ca = decodedCookie.split(';'))。

遍历 ca 数组 (i = 0; i < ca.length; i++),并读取每个值 (c = ca[i])。

如果找到 Cookie (c.indexOf(name) == 0),则返回 Cookie 的值 (c.substring(name.length, c.length))。

如果未找到 Cookie,则返回 ""。


一个检查 Cookie 的函数

最后,我们创建检查 Cookie 是否已设置的函数。

如果 Cookie 已设置,它将显示问候语。

如果 Cookie 未设置,它将显示一个提示框,要求输入用户的姓名,并通过调用 setCookie 函数将用户名 Cookie 存储 365 天。

示例

function checkCookie() {
  let username = getCookie("username");
  if (username != "") {
   alert("欢迎再次光临 " + username);
  } else {
    username = prompt("请输入您的姓名:", "");
    if (username != "" && username != null) {
      setCookie("username", username, 365);
    }
  }
}

现在一起

示例

function setCookie(cname, cvalue, exdays) {
  const d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  let expires = "expires="+d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  let name = cname + "=";
  let ca = document.cookie.split(';');
  for(let i = 0; i < ca.length; i++) {
    let c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function checkCookie() {
  let user = getCookie("username");
  if (user != "") {
    alert("欢迎再次光临 " + user);
  } else {
    user = prompt("请输入您的姓名:", "");
    if (user != "" && user != null) {
      setCookie("username", user, 365);
    }
  }
}
自己动手试一试 »

上面的示例在页面加载时运行 checkCookie() 函数。


×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持