vue-cookies 使用

npm鏈接:https://www.npmjs.com/package/vue-cookies
下附源碼

引入 vue-cookies

npm install vue-cookies --save

// require
var Vue = require('vue')
Vue.use(require('vue-cookies'))

// es2015 module
import Vue from 'vue'
import VueCookies from 'vue-cookies'
Vue.use(VueCookies)

$cookies.config() 設(shè)置默認值

$cookies.config(expireTimes, path)

expireTimes 默認1d
path 默認'/'。 注意:// 哈希模式下:域名/projectName/#/aaaa 默認為 '/projectName'白魂。 域名/projectName#/aaaa 默認為 '/'汽纤。確認 #號前面是否有'/'。

$cookies.set()

$cookies.set(key, value[, expireTimes[, path[, domain[, secure]]]]) 
  1. key: cookie名
    注意 $cookies key names Cannot be set to ['expires', 'max-age', 'path', 'domain', 'secure']
  2. value: cookie值
    vue-cookie會自動幫你把對象轉(zhuǎn)為json if (value && value.constructor === Object ){value = JSON.stringify(value)}
  3. expireTimes: cookie有效時間福荸,默認時間為1d
    可以為到期時間點(expire=) [Date]冒版,也可以為有效時間段單位s(max-age=)[Number],傳入Infinity||-1被認該cookie永久有效逞姿,傳入0 會被判斷為false導(dǎo)致取默認值辞嗡,傳入非-1 的負數(shù)會立即刪除該cookie。傳入String類型但又不會被正則匹配的('0'滞造、'abc'续室、'Session')則關(guān)閉瀏覽器的時候銷毀cookie(Expire/Max-Age=Session),效果類似Session谒养。
  4. path: cookie所在目錄挺狰,默認 '/' 根目錄
    設(shè)置path: '/projectName'指定項目名下'/projectName'使用
  5. domain: cookie所在的域,默認為請求地址
  6. secure: Secure屬性是說如果一個cookie被設(shè)置了Secure=true买窟,那么這個cookie只能用https協(xié)議發(fā)送給服務(wù)器丰泊,用http協(xié)議不發(fā)送。

$cookies.get('key')

$cookies.get(key)       // return value

$cookies.remove('key')

$cookies.remove(key [, path [, domain]])   // return  false or true , warning: next version return this始绍; use isKey(key) return true/false,please

是否有key cookie

$cookies.isKey(key) // return true or false

列出所有cookie

$cookies.keys() // return ['key', 'key', ......]

源碼

/**
 * Vue Cookies v1.5.7
 * https://github.com/cmp-cc/vue-cookies
 *
 * Copyright 2016, cmp-cc
 * Released under the MIT license
 */

(function() {

    var defaultConfig = {
        expires : '1d',
        path : '; path=/'
    }

    var VueCookies = {
        // install of Vue
        install: function(Vue) {
            Vue.prototype.$cookies = this
            Vue.cookies = this
        },
        config : function(expireTimes,path) {
            if(expireTimes) {
                defaultConfig.expires = expireTimes;
            }
            if(path === '') {
                defaultConfig.path = '';
            }else {
                defaultConfig.path = '; path=' + path;
            }
        },
        get: function(key) {
            var value = decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null

            if(value && value.startsWith("{") && value.endsWith("}")) {
                try {
                    value = JSON.parse(value)
                }catch (e) {
                    return value;
                }
            }
            return value;
        },
        set: function(key, value, expireTimes, path, domain, secure) {
            if (!key) {
                throw new Error("cookie name is not find in first argument")
            }else if(/^(?:expires|max\-age|path|domain|secure)$/i.test(key)){
                throw new Error("cookie key name illegality ,Cannot be set to ['expires','max-age','path','domain','secure']\t","current key name: "+key);
            }
            // support json object
            if(value && value.constructor === Object ) {
                value = JSON.stringify(value);
            }
            var _expires = "; max-age=86400"; // temp value, default expire time for 1 day
            expireTimes = expireTimes || defaultConfig.expires;
            if (expireTimes) {
                switch (expireTimes.constructor) {
                    case Number:
                        if(expireTimes === Infinity || expireTimes === -1) _expires = "; expires=Fri, 31 Dec 9999 23:59:59 GMT";
                        else _expires = "; max-age=" + expireTimes;
                        break;
                    case String:
                        if (/^(?:\d{1,}(y|m|d|h|min|s))$/i.test(expireTimes)) {
                            // get capture number group
                            var _expireTime = expireTimes.replace(/^(\d{1,})(?:y|m|d|h|min|s)$/i, "$1");
                            // get capture type group , to lower case
                            switch (expireTimes.replace(/^(?:\d{1,})(y|m|d|h|min|s)$/i, "$1").toLowerCase()) {
                                // Frequency sorting
                                case 'm':  _expires = "; max-age=" + +_expireTime * 2592000; break; // 60 * 60 * 24 * 30
                                case 'd':  _expires = "; max-age=" + +_expireTime * 86400; break; // 60 * 60 * 24
                                case 'h': _expires = "; max-age=" + +_expireTime * 3600; break; // 60 * 60
                                case 'min':  _expires = "; max-age=" + +_expireTime * 60; break; // 60
                                case 's': _expires = "; max-age=" + _expireTime; break;
                                case 'y': _expires = "; max-age=" + +_expireTime * 31104000; break; // 60 * 60 * 24 * 30 * 12
                                default: new Error("unknown exception of 'set operation'");
                            }
                        } else {
                            _expires = "; expires=" + expireTimes;
                        }
                        break;
                    case Date:
                        _expires = "; expires=" + expireTimes.toUTCString();
                        break;
                }
            }
            document.cookie = encodeURIComponent(key) + "=" + encodeURIComponent(value) + _expires + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : defaultConfig.path) + (secure ? "; secure" : "");
            return this;
        },
        remove: function(key, path, domain) {
            if (!key || !this.isKey(key)) {
                return false;
            }
            document.cookie = encodeURIComponent(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (domain ? "; domain=" + domain : "") + (path ? "; path=" + path : defaultConfig.path);
            return this;
        },
        isKey: function(key) {
            return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
        },
        keys:  function() {
            if(!document.cookie) return [];
            var _keys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
            for (var _index = 0; _index < _keys.length; _index++) {
                _keys[_index] = decodeURIComponent(_keys[_index]);
            }
            return _keys;
        }
    }

    if (typeof exports == "object") {
        module.exports = VueCookies;
    } else if (typeof define == "function" && define.amd) {
        define([], function() {
            return VueCookies;
        })
    } else if (window.Vue) {
        Vue.use(VueCookies);
    }
    // vue-cookies can exist independently,no dependencies library
    if(typeof window!=="undefined"){
        window.$cookies = VueCookies;
    }

})()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞳购,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亏推,更是在濱河造成了極大的恐慌学赛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吞杭,死亡現(xiàn)場離奇詭異盏浇,居然都是意外死亡,警方通過查閱死者的電腦和手機芽狗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門绢掰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事滴劲」ド梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵哑芹,是天一觀的道長炎辨。 經(jīng)常有香客問我,道長聪姿,這世上最難降的妖魔是什么碴萧? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮末购,結(jié)果婚禮上破喻,老公的妹妹穿的比我還像新娘。我一直安慰自己盟榴,他們只是感情好曹质,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著擎场,像睡著了一般羽德。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迅办,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天宅静,我揣著相機與錄音,去河邊找鬼站欺。 笑死姨夹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的磷账。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逃糟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榄鉴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤庆尘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巷送,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驶忌,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年付魔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片几苍。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡翻屈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妻坝,到底是詐尸還是另有隱情伸眶,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布厘贼,位于F島的核電站,受9級特大地震影響嘴秸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庇谆,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望串述。 院中可真熱鬧,春花似錦哥攘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅葡。三九已至茉兰,卻和暖如春欣簇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熊咽。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留横殴,地道東北人被因。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像梨与,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粥鞋,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 會話(Session)跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個會話壕曼。常用的會話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,620評論 1 49
  • HTTP cookie(也稱為web cookie,網(wǎng)絡(luò)cookie,瀏覽器cookie或者簡稱cookie)是網(wǎng)...
    留七七閱讀 17,968評論 2 71
  • 今天webryan給team做了一個關(guān)于HTTP cookie的分享尚猿,從各個方面給大家介紹一下大家耳熟能詳?shù)腃oo...
    秒贊不是偶然閱讀 8,674評論 0 20
  • 幸福是什么伴榔?有個人一起做飯吃早餐庄萎;生病了有人關(guān)心踪少、有人陪糠涛?受委屈了有個肩膀可訴援奢、可哭泣忍捡?心情郁悶了集漾,有個人陪...
    小小心間夢閱讀 174評論 0 0
  • 站在三尺的講臺砸脊,從走來具篇,我遙望了一年凌埂,和付出無關(guān)驱显,事關(guān)機緣。我摸著書本想起恩師與佛陀瞳抓,巧把塵勞做佛事,菩薩現(xiàn)32相...
    Ada心依閱讀 219評論 0 0