手寫jquery.cookie外掛
/**
* 設定cookie
* @param name
* @param value
* @param config expires:(Number|Date)有效期;設定一個整數時,單位是天;也可以設定一個日期物件作為Cookie的過期日期;
path:(String)建立該Cookie的頁面路徑;
domain:(String)建立該Cookie的頁面域名;
secure:(Boolean)如果設為true,那麼此Cookie的傳輸會要求一個安全協議,例如:HTTPS;
*/
function addCookie(name,value,config = {
expires: null,
path: null,
maxAge: null,
domain: null,
secure: true,
httpOnly: true
}) {
value = $.cookie.json ? JSON.stringify(value) : value;
value = $.cookie.raw ? value : encodeURIComponent(value);
let cookieStr = name + '=' + value;
if(config) {
if(config.expires) {
if(typeof config.expires === 'number') {
const date=new Date();
date.setTime(date.getTime()+config.expires*86400000);
cookieStr += '; expires=' + date.toUTCString();
}else if(config.expires instanceof Date) {
cookieStr += '; expires=' + config.expires.toUTCString();
}else {
throw new Error('expires屬性必須為Number或Date型別')
}
}
cookieStr += config.path ? '; path='+config.path : '';
cookieStr += config.maxAge ? '; max-age='+config.maxAge : '';
cookieStr += config.domain ? '; domain=' + config.domain : '';
cookieStr += config.secure ? '; secure' : '';
cookieStr += config.httpOnly ? ';httpOnly' : '';
}
document.cookie = cookieStr;
}
/**
* 獲取cookie
* @param name
* @returns {{}|*}
*/
function getCookie(name) {
let cookieStrArr = document.cookie.split(';');
let cookieObj = {};
cookieStrArr.forEach(cookieStr => {
let temp = cookieStr.split('=');
let key = temp[0].trim();
let value = temp[1];
value = $.cookie.json ? JSON.parse(value) : value;
value = $.cookie.raw ? value : decodeURIComponent(value);
cookieObj[key] = value;
});
if(name) {
return cookieObj[name];
}else {
return cookieObj;
}
}
/**
* 移除cookie
* @param name
* @param config
*/
function removeCookie(name,config) {
//過期時間設為以前的時間就是刪除cookie
config.expires = -1;
addCookie(name,null,config);
}
$.extend({
/**
* 設定,獲取或移除cookie
* @param name
* @param value
* @param config
*/
cookie: function (name,value,config) {
if(value) {
addCookie(name,value,config);
}else if(value == null) {
removeCookie(name,null,config);
}else {
getCookie(name);
}
},
/**
* 移除cookie
* @param name
* @param config
* @returns {boolean}
*/
removeCookie(name,config) {
if(getCookie(name)) {
removeCookie(name,config);
return true;
}else {
return false;
}
}
});
/**
* 預設值:false。
預設情況下,讀取和寫入 cookie 的時候自動進行編碼和解碼(使用 encodeURIComponent 編碼,decodeURIComponent 解碼)。要關閉這個功能設定 raw:true 即可:
* @type {boolean}
*/
$.cookie.raw = false;
/**
* 預設值:false。
* 設定 cookie 的資料使用 json 儲存與讀取,這時就不需要使用 JSON.stringify 和 JSON.parse 了。
* @type {boolean}
*/
$.cookie.json = false;
相關文章
- 手牽手教你寫 Vue 外掛Vue
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- 【AST篇】教你如何動手寫 Eslint 外掛ASTEsLint
- 手寫vue-router & 什麼是Vue外掛Vue
- 手寫一個Redis和Spring整合的外掛RedisSpring
- 編寫node 外掛
- egg外掛編寫
- eggjs外掛編寫JS
- 編寫jq外掛
- [外掛擴充套件]自己寫的外掛。怎麼後臺?套件
- markdown-it 外掛如何寫(一)
- markdown-it 外掛如何寫(二)
- 如何編寫 ProtoBuf 外掛 (一) ?
- 如何編寫 ProtoBuf 外掛 (二) ?
- 如何編寫 ProtoBuf 外掛 (三) ?
- markdown-it 外掛如何寫(三)
- 自己寫一個Babel外掛Babel
- vue外掛編寫小記Vue
- [外掛擴充套件]【小白練手】 51啦統計外掛套件
- Kotlin/Native 用KMM寫Flutter外掛KotlinFlutter
- Go - 如何編寫 ProtoBuf 外掛 (三) ?Go
- Go - 如何編寫 ProtoBuf 外掛(二)?Go
- Go - 如何編寫 ProtoBuf 外掛 (一) ?Go
- jquery寫的ajax分頁外掛jQuery
- 重寫Hexo豆瓣影評外掛Hexo
- 編寫自己的Babel外掛(一)Babel
- 如何寫一個Vue的外掛Vue
- 如何從零編寫一個vite外掛 建立 vite 外掛通用模板Vite
- 自己模擬遊戲引擎,動手寫個js碰撞檢測外掛遊戲引擎JS
- 手動實現HTML外掛BeautifyHTML
- flutter外掛編寫及釋出流程Flutter
- 自己寫一個vue的loading外掛Vue
- Flutter 外掛編寫必知必會Flutter
- 給Ionic寫一個cordova(PhoneGap)外掛
- YII框架 外掛引入問題,手動引入 redis外掛, class "yii\redis\Cache".框架Redis
- 如何編寫一個 Pulsar Broker Interceptor 外掛
- APISIX外掛如何編寫單元測試API
- 寫了一個 gorm 樂觀鎖外掛GoORM