Cookie增删改查方法封装(低内存开销版)

这篇具有很好参考价值的文章主要介绍了Cookie增删改查方法封装(低内存开销版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章中的低内存开销是指在获取cookie的时候不进行字符串—>数组的转变,全程使用slice+indexOf切割字符串,不创建和操作数组,节约内存,本文代码已存放到github中,后续会持续完善功能,传送门:https://github.com/Escaay/cookieHandler.git
本文由Escaay原创,转载请注明出处

一、前置知识

0.测试cookie,需要服务器环境,想要在本地完成,需要模拟服务器环境,最快的方法是在vscode扩展中下载Live Server

Cookie增删改查方法封装(低内存开销版)

然后重启vscode,右键点击图示即可在服务器环境运行代码

Cookie增删改查方法封装(低内存开销版)

1.cookie是挂在ducument上的,document是一个HTML标签的DOM经过特殊加工的对象,所以我们获取cookie,一般是

let cookie=document.cookie

2.添加cookie,每一次设置document.cookie都会添加cookie,而不是给cookie重新赋值,而且会自动在每个分号之后添加一个空格,例如

document.cookie='username=escaay'
document.cookie='username=xiaoming'
console.log(document.cookie)	
//'username=escaay; username=xiaoming'

3.cookie的value中不能含有;=等特殊字符,如果需要,则借助encodeURIComponent()进行编码后再赋值,取出时用decodeURIComponent解码

let value=;escaay//;是特殊字符
document.cookie=`name=username;value=${encodeURIComponent(value)}`

二、cookie增删改查方法封装

1.添加一个cookie

function setCookie(name, value, maxAge) {
            let cookie = `${name}=${encodeURIComponent(value)}`
            //判断传入过期时间类型,是数字的话就添加到cookie
            if (typeof maxAge==='number') {
                cookie += `;max-age=${maxAge}`
            }
            document.cookie = cookie
        }

2.获取整个对象类型的cookie

function getCookieObject() {
			//cookie为空返回null
            if(!document.cookie.length) return 'cookie为空'
            let result = {}
            //将添加cookie时自动生成的空格去掉,避免后面索引对不上
            let cookieStr = document.cookie.replace(/; /g, ';')
            //为cookie最后添加分号,这样一会循环才能遍历最后一项
            if (cookieStr.slice(-1) !== ';') cookieStr += ';'
            //滑动选取每一项cookie元素
            let startIndex = 0
            let nextStartIndex = 0
            //等号的索引
            let equalIndex = 0
            //当startIndex之后不再有分号时,已经遍历每一项cookie元素
            while (cookieStr.indexOf(';', startIndex) !== -1) {
                equalIndex = cookieStr.indexOf('=', startIndex)
                nextStartIndex = cookieStr.indexOf(';', startIndex) + 1
                let key = cookieStr.slice(startIndex, equalIndex)
                let value = decodeURIComponent(cookieStr.slice(equalIndex + 1, nextStartIndex-1))
                result[key] = value
                startIndex = nextStartIndex
            }
            return result
        }

3.根据名称获取单个cookie的值

function getCookie(name) {
			//未传参则退出函数
            if(!name)  return 'cookie中不存在此键'
            let cookieStr = document.cookie
            if (cookieStr.slice(-1) !== ';') cookieStr += ';'
            let startIndex=cookieStr.indexOf(`${name}=`)
            if(startIndex===-1) return 'cookie中不存在此键'
            startIndex+=name.length+1
            let endIndex=cookieStr.indexOf(';',startIndex)
            return decodeURIComponent(cookieStr.slice(startIndex,endIndex))
        }
}

4.根据名称删除单个cookie

function deleteCookie(name){
            setCookie(name,'',0)
            console.log(`cookie中${name}删除成功`)
        }

5.清除cookie

function clearCookie(){
            let cookieObj=getCookieObject()
            Object.keys(cookieObj).forEach((v,i)=>{
                deleteCookie(v)
            })
            console.log('cookie清除成功')
        }

测试代码

        //test
        setCookie('username', 'escaay;;;')
        setCookie('phone', '88888')
        console.log('getCookieObject:  ',getCookieObject())
        console.log("getCookie('username'):  ",getCookie('username'))
        deleteCookie('username')
        console.log('getCookieObject:  ',getCookieObject())
        console.log("getCookie('username'):  ",getCookie('username'))
        clearCookie()
        console.log('getCookieObject:  ',getCookieObject())

测试结果
Cookie增删改查方法封装(低内存开销版)文章来源地址https://www.toymoban.com/news/detail-490246.html

到了这里,关于Cookie增删改查方法封装(低内存开销版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包