【Code】Cookie操作封装

60 阅读1分钟
const getDomain = () => {
    const host = window.location.host
    if(host==='localhost:8080') {
        // 植入cookie时不可设置domain
        return ''
    }
    const arr = host.split('.')
    if (arr.length > 2) {
        const len = arr.length
        return `${arr[len - 2]}.${arr[len - 1]}`
    }
    return host
}

/* Cookie */
const Cookie = {
    get: function (name: string) {
        let arr
        const reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
        if ((arr = document.cookie.match(reg))) {
            return unescape(arr[2])
        } else {
            return null
        }
    },
    getObj: function () {
        const arr = document.cookie.split(';')
        let jsonStr = '{'
        for (let i = 0; i < arr.length; i++) {
            const cookie = arr[i].split('=')
            jsonStr +=
                '"' +
                cookie[0].replace(/\s+/g, '') +
                '":"' +
                decodeURIComponent(cookie[1]) +
                '",'
        }
        jsonStr = jsonStr.slice(0, -1)
        jsonStr += '}'
        return JSON.parse(jsonStr)
    },
    set: function (name: string, value: any, time: any, domain: string = getDomain(), path: string = '/') {
        let str = name + '=' + encodeURIComponent(value)
        if (time) {
            const date = (new Date(time) as any).toGMTString()
            str += ';expires=' + date
        }
        str = domain ? str + ';domain=' + domain : str
        str = path ? str + ';path=' + path : str
        document.cookie = str
    },
    // 删除一个cookie,必须域名和path都跟已有的cookie相同
    del: function (name: string, domain: string = getDomain(), path: string = '/') {
        const date = new Date('1970-01-01')
        let str = name + '=null;expires=' + (date as any).toGMTString()
        str = domain ? str + ';domain=' + domain : str
        str = path ? str + ';path=' + path : str
        document.cookie = str
    },
}

export default Cookie