cookiejs
Version:
A simple, lightweight JavaScript API for handling browser cookies.
119 lines (109 loc) • 3.71 kB
JavaScript
/**!
* cookiejs v2.1.4
* A simple, lightweight JavaScript API for handling browser cookies.
*
* Copyright (c) 2026 kenny wong
* https://github.com/jaywcjlove/cookie.js.git
*
* @website: https://jaywcjlove.github.io/cookie.js/
* Licensed under the MIT license
*/
;
function getKeys(obj) {
var names = [], name = '';
for (name in obj) {
names.push(name);
}
return names;
}
function isPlainObject(obj) {
obj = JSON.stringify(obj);
if (typeof obj !== 'string') {
return false;
}
if (!/^\{[\s\S]*\}$/.test(obj)) {
return false;
}
return true;
}
function isArray(value) { return value instanceof Array }
function toArray(value) {
return Array.prototype.slice.call(value);
}
function Cookie(){
if(!(this instanceof Cookie)) {
return new Cookie()
}}
Cookie.prototype = {
get: function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');//把cookie分割成组
for(var i=0;i < ca.length;i++) {
var c = ca[i];//取得字符串
while (c.charAt(0)==' ') {//判断一下字符串有没有前导空格
c = c.substring(1,c.length);//有的话,从第二位开始取
}
//如果含有我们要的name
if (c.indexOf(nameEQ) == 0) {
return decodeURI(c.substring(nameEQ.length,c.length));//解码并截取我们要值
}
}
return false;
},
set: function(name, value, options) {
if (isPlainObject(name)) {
for (const k in name) {
this.set(k, name[k], value, options);
}
} else if (typeof name === 'string') {
const opt = isPlainObject(options) ? options : { expires: options },
path = opt.path !== undefined ? `;path=${opt.path};path=/` : ';path=/',
domain = opt.domain ? `;domain=${opt.domain}` : '',
secure = opt.secure ? ';secure' : '';
let expires = opt.expires !== undefined ? opt.expires : '';
//过期时间
if (typeof expires === 'string' && expires !== '') {
expires = new Date(expires);
} else if (typeof expires === 'number') {
expires = new Date(+new Date + 1000 * 60 * 60 * 24 * expires);
} if (expires !== '' && 'toGMTString' in expires) {
expires = `;expires=${expires.toGMTString()}`;
}
const sameSite = opt.sameSite ? `;SameSite=${opt.sameSite}` : '';
document.cookie = `${name}=${encodeURI(value) + expires + path + domain + secure + sameSite}`; // 转码并赋值
}
},
remove: function(names) {
names = isArray(names) ? names : toArray(arguments);
for (var i = 0, l = names.length; i < l; i++) {
this.set(names[i], '', -1);
}
return names;
},
clear: function(name) {
return name ? this.remove(name) : this.remove(getKeys(this.all()));
},
all: function() {
if (document.cookie === '') return {};
var cookies = document.cookie.split('; '),result = {};
for (var i = 0, l = cookies.length; i < l; i++) {
var item = cookies[i].split('=');
result[decodeURI(item[0])] = decodeURI(item[1]);
}
return result;
}
};
let _Cookie = null;
const cookie = function(name, value, options) {
const argm = arguments;
if (!_Cookie) _Cookie = Cookie();
if (argm.length === 0) return _Cookie.all();
if (argm.length === 1 && name === null) return _Cookie.clear();
if (argm.length === 2 && !value) return _Cookie.clear(name);
if (typeof name == 'string' && !value) return _Cookie.get(name);
if ((typeof name === 'string' && value) || isPlainObject(name)) {
return _Cookie.set(name, value, options);
}
};
for (const a in Cookie.prototype) cookie[a] = Cookie.prototype[a];
module.exports = cookie;