Cookie存储

本文介绍了JavaScript中的Cookie存储方式,包括创建、获取和删除Cookie的实现细节。Cookie作为前端存储的一种,虽然有其局限性,但常用于存储简单信息和用户行为规范。文中提供了一个完整的Cookie操作封装示例,包括设置有效期、路径、域名等参数。
摘要由CSDN通过智能技术生成

首先,前端存储方式有四种,CookielocalStorageSessionStorageIndexDB,今天分享的是第一种存储方式 Cookie 存储方式

Cookie,JavaScript 中 Document 的一个属性,其作用是可以在其浏览器内部写入一条键值对形式的字符串,由于其自身存储数据的限制与缺陷,一般不建议使用。但在实际工作中一般都会用于存储一些简单的信息,用于对用户行为上做一定的规范。

cookie 的创建

// 1. 创建 Cookie
var cookie = document.cookie = 'name=value';

如此,一个 cookie 数据就创建成功了。效果如下:

Cookie 创建成功后,须在本地服务器下的 Application(应用) 中查看

   

JavaScript 原生写法

// document.cookie = 'name=value[;expires = 日期对象][;path = 路径][;domain = 域名][;secure(是否加密)]';

   常用参数

  • 名称:这条 Cookie 的名字,类似于人的姓名
  • 值:这条 Cookie 具体所承载的数据内容
  • Domain: 服务器域名地址,这里使用的是本地服务器,所以域名为 127.0.0.1

  • Path: 路径,Cookie 的生效范围。即在本页面所产生的 Cookie 是否在其他页面生效。因为 cookie 有域名限制,要想在其他页面中拿到这条 cookie,需要改变路径地址,也就是将它的作用域范围提升,才能进行全局访问

  • Expires/Max-Age:有效期,字面意思。就是 Cookie 的生存时间,超过这个时间,Cookie 会被浏览器自动删除,一般情况下,浏览器关闭后,Cookie 会被清空,所以在实际应用中一般都需要进行设置有效期

  • Secure:是否加密,属性设置为 true 时,该条 Cookie 将只能以 https 的这种形式发送到服务器

     

创建cookie

​// 创建cookie
cookie(key, value, json) {
// 初始化
	json = json || {};
	// key = value
	// 键值对可能传入的是中文
	let cookie_str = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
	// 有效期
	// 如果传入的不是 NaN
	if (!isNaN(json.expires)) {
		// 创建日期对象
		let date = new Date();
		date.setDate(date.getDate() + json.expires);
		cookie_str += ';expires=' + date;
	}
	// 路径
	if (json.path) {
		cookie_str += ';path=' + json.path;
	}
	// 域名
	if (json.domain) {
		cookie_str += ';domain=' + json.domain;
	}
	// secure(是否加密)
	if (json.secure) {
		cookie_str += ';secure';
	}
	// 创建 cookie
	document.cookie = cookie_str;
}

​

获取Cookie(方式一)

// 获取 cookie
getCookie() {
	// 存入 cookie 的为编码后的 , 需先编码后查
	key = encodeURIComponent(key) + '=';
	// 获取 cookie 的整个串(父串)
	let cookie = document.cookie;
	// 从父串中查
	let start = cookie.indexOf(key);
	// 判断 start 是否为 -1, 
	// 是	截取到长度
	// 否	求 end
	if (start !== -1) {
		let end = cookie.indexOf(';', start);

		if (end === -1) {
			end = cookie.length;
		}
		return decodeURIComponent(cookie.substring(start + key.length, end));
	}
}

获取Cookie(方式二)

let arr = document.cookie.split('; ');
for (let i = 0, len = arr.length; i < len; i++) {
	let list = arr[i].split('=');
	// 
	if(encodeURIComponent(key) === list[0]){
		return decodeURIComponent(list[1]);
	}	
}

删除Cookie

removeCookie(key, json) {
	json = json || {};
	if (json.path) {
		document.cookie = encodeURIComponent(key) + '=;expires=' + new Date(0) +';path=' + json.path;
	}else{
		document.cookie = encodeURIComponent(key) + '=;expires=' + new Date(0);
    }
}

完整版

// 外部传入一个键值对
			// 封装
			// 创建一个对象 $
			let $ = {
				// 创建方法  cookie	getCookie	removeCookie
				// 需要 key, value, 对象(可加可不加)
				cookie(key, value, json) {
					// 初始化
					json = json || {};
					// key = value
					// 键值对可能传入的是中文
					let cookie_str = `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;

					// 有效期
					// 如果传入的不是 NaN
					if (!isNaN(json.expires)) {
						// 创建日期对象
						let date = new Date();
						date.setDate(date.getDate() + json.expires);
						cookie_str += ';expires=' + date;
					}
					// 路径
					if (json.path) {
						cookie_str += ';path=' + json.path;
					}
					// 域名
					if (json.domain) {
						cookie_str += ';domain=' + json.domain;
					}
					// secure(是否加密)
					if (json.secure) {
						cookie_str += ';secure';
					}
					// 创建 cookie
					document.cookie = cookie_str;
				},
				// 获取 cookie
				getCookie() {
					// // 存入 cookie 的为编码后的 , 需先编码后查
					// key = encodeURIComponent(key) + '=';
					// // 获取 cookie 的整个串(父串)
					// let cookie = document.cookie;
					// // 从父串中查
					// let start = cookie.indexOf(key);
					// // 判断 start 是否为 -1, 
					// // 是	截取到长度
					// // 否	求 end
					// if (start !== -1) {
					// 	let end = cookie.indexOf(';', start);

					// 	if (end === -1) {
					// 		end = cookie.length;
					// 	}
					// 	return decodeURIComponent(cookie.substring(start + key.length, end));
					// }

					// 利用切割
					let arr = document.cookie.split('; ');
					for (let i = 0, len = arr.length; i < len; i++) {
						let list = arr[i].split('=');
						// 找到key,返回value值
						if (encodeURIComponent(key) === list[0]) {
							return decodeURIComponent(list[1]);
						}
					}
				},
				removeCookie(key, json) {
					json = json || {};
					if (json.path) {
						document.cookie = encodeURIComponent(key) + '=;expires=' + new Date(0) + ';path=' + json.path;
					}else{
						document.cookie = encodeURIComponent(key) + '=;expires=' + new Date(0);
					}
				}
				
			}

文章仅供参考,有什么好的建议或意见,欢迎留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习中进步

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

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

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

打赏作者

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

抵扣说明:

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

余额充值