【JavaScript】Cookie的使用


Cookie

一、概述

Cookie是会话技术的一种,主要用于将会话过程产生的数据保存到客户端(浏览器),从而使客户端每次和服务端之间可以更好的进行交互。

我们通过一个生活中的例子来理解下Cookie的概念。在生活中,大家应该都有接触过会员卡,比如理发店、超市等等。我们办理会员卡后,店家会给我们一张卡片,以后每次来消费时,只需出示这张卡片,就可以获取到你的余额、积分、消费记录等信息,然后基于上面的信息来进行折扣的计算、积分的累加,余额的扣减等操作。

在Web应用中,Cookie的功能就类似于上面的例子中的会员卡,第一次请求时,会创建一个Cookie,当用户再次访问服务器时,就会携带上Cookie(会员卡),服务端也会根据处理结果,将一些信息放到Cookie中,以保存在客户端。

参考:https://blog.csdn.net/qq_34666857/article/details/105542141

返回顶部


二、作用

  1. 保存在客户端 — 浏览器端

  2. 相当于浏览器提供的一小块存储空间

  3. 可以设置禁用

  4. 键值对形式存储

  5. 可以设置过期时间
    会话cookie(临时cookie) 关闭窗口就删除
    永久cookie:设置有效期

  6. 适用于保存一些数据量较小的数据,比如:账户密码(加密过的)、状态信息、离线部分信息、后台传输小批量数据

  7. 不建议在其中放置大量的数据

返回顶部


三、官方文档

3.1 通过 JavaScript 创建 cookie

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

通过 JavaScript,可以这样创建 cookie

document.cookie = "username=Bill Gates";

还可以添加有效日期(UTC 时间)。默认情况下,在浏览器关闭时会删除 cookie:

document.cookie = "username=John Doe; expires=Sun, 31 Dec 2017 12:00:00 UTC";

通过 path 参数,您可以告诉浏览器 cookie 属于什么路径。默认情况下,cookie 属于当前页。

document.cookie = "username=Bill Gates; expires=Sun, 31 Dec 2017 12:00:00 UTC; path=/";

返回顶部


3.2 通过 JavaScript 读取 cookie

通过 JavaScript,可以这样读取 cookie

var x = document.cookie;

document.cookie 会在一条字符串中返回所有 cookie,比如:cookie1=value; cookie2=value; cookie3=value;

返回顶部


3.3 通过 JavaScript 改变 cookie

通过使用 JavaScript,你可以像你创建 cookie 一样改变它:

document.cookie = "username=Steve Jobs; expires=Sun, 31 Dec 2017 12:00:00 UTC; path=/";

旧 cookie 被覆盖

返回顶部


3.4 通过 JavaScript 删除 cookie

删除 cookie 非常简单。

删除 cookie 时不必指定 cookie 值:

直接把 expires 参数设置为过去的日期即可:

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

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

如果你不指定路径,一些浏览器不会让你删除 cookie。

返回顶部


3.5 Cookie 字符串

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

即使你向 document.cookie 写一份完整的 cookie 字符串,当再次读取时,你只能看到它的名称-值对。

如果设置了新 cookie,则旧的 cookie 不会被覆盖。新的 Cookie 会被添加到 document.cookie,所以如果你读取 document.cookie,你得到的东西会像这样:

cookie1 = value; cookie2 = value;

显示所有 cookie 创建 cookie 1 创建 cookie 2 删除 cookie 1 删除 cookie 2

如果你想找到一个指定 cookie 的值,你必须编写 JavaScript 函数来搜索 cookie 字符串中的 cookie 值。

返回顶部


四、简单使用

4.1 添加

// 添加cookie
document.cookie = "key1" + "=" + "123456" + ";";
document.cookie = "key2" + "=" + "1234567" + ";";
document.cookie = "key3" + "=" + "12345678" + ";";

返回顶部


4.2 查询

var cs = document.cookie.split(";");
// 方式一
for (i = 0; i < cs.length; i++) {
    let item = cs[i].trim();
    if (item.indexOf("key1") == 0) {
        alert("键的值是:" + item.substring("key1".length + 1, item.length));
    }
}
// 方式二
//  * 对item再切分,按照key去判断
//  缺点:如果value被清除了,会出现数组下标越界
// for(i=0;i<cs.length;i++){
// 	let item = cs[i].split("=");
// 	if (item[0].indexOf("key1") == 0){
// 		alert("键的值是:"+item[1]);
// 	}
// }
document.write(document.cookie)

image-20210519094853661

返回顶部


4.3 设置过期时间

// 设置过期时间
// 20s 按日计算:24*60*60*1000
var d = new Date();
d.setTime(d.getTime() + (20 * 1000));
let expires = "expires=" + d.toGMTString();
document.cookie = "key4" + "=" + "123456789" + ";" + expires;
// 官方写法:不使用trim(),避免了值部分的空格数据丢失
function getCookie(cname) {
    var name = cname + "=";
    // decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码
    var decodedCookie = decodeURIComponent(document.cookie);
    // 拆分
    var ca = decodedCookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        // 清除键部分的空格
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        // 判断键的存在
        if (c.indexOf(name) == 0) {
            // 返回值
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
// 控制台输出
console.log("对应键的值是:" + getCookie("key4"));

image-20210519095101468

image-20210519095115029


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值