
嘻道奇闻
- 文章199742
- 阅读14625734
前端开发者必看:JavaScrpt读取Cookie的3种方法及常见问题解决
新手如何快速掌握Cookie读取?为什么明明设置了Cookie却总是显示undefined?今天我们就用最直白的语言,手把手教你玩转浏览器Cookie操作。
一、Cookie到底是个啥?
简单来说,??Cookie就是浏览器帮你记住的小纸条??。比如你登录网站时勾选"记住密码",服务器就会塞一张写着"用户=张三"的纸条到浏览器里。下次访问时,浏览器自动把纸条内容回传给服务器。但实际操作中很多人连纸条都找不到,下面直接上干货。
二、3种读取Cookie的实战方法
??方法1:直接调用document.cookie??
这是最原始但也最容易被坑的方式。在控制台输入document.cookie
,你会看到类似username=小明; token=123abc
的字符串。
但问题来了——当你想单独获取用户名时,得自己拆解字符串:
javascript复制const cookies = document.cookie.split(';').map(c => c.trim()) const userCookie = cookies.find(c => c.startsWith('username=')) const username = userCookie ? userCookie.split('=')[1] : null
??注意点??:
- 分号分隔的每个键值对可能有空格
- 遇到中文或特殊符号(如@#%)会显示乱码
??方法2:封装getCookie函数??
老司机都会自己写工具函数。这里直接给你个带解码的版本:
javascript复制function getCookie(name) { const cookieStr = decodeURIComponent(document.cookie) const cookies = cookieStr.split(';') for(let c of cookies) { const [key, val] = c.trim().split('=') if(key === name) return val } return null }
这个版本做了两件重要的事:
- 用
decodeURIComponent
处理编码问题(比如把"%E5%B0%8F"还原成"小") - 自动去除键值前后的空格
??方法3:处理多个Cookie的骚操作??
当需要批量获取Cookie时,可以转成对象格式:
javascript复制const cookieObj = document.cookie.split(';').reduce((obj, c) => { const [key, val] = c.trim().split('=') obj[key] = val return obj }, {})
这样就能通过cookieObj.username
直接取值,但要注意——??这种写法会覆盖同名Cookie??(虽然99%场景不会遇到重复Cookie)
三、新手必踩的坑与解决方案
??坑1:死活读不到Cookie??
大概率是遇到了以下情况:
- ??HttpOnly限制??:带这个属性的Cookie无法用JS读取(常见于登录凭证)
解决方案:让后端去掉HttpOnly或换用localStorage - ??路径不匹配??:比如在/about页面设置的Cookie默认只能在/about下读取
解决方案:设置Cookie时加上path=/
- ??域名不符??:在a.com设置的Cookie,b.com肯定读不到
解决方案:跨域场景用CORS或代理
??坑2:读取到undefined或乱码??
别急着怀疑人生,先检查这两点:
- 是否忘记解码?
decodeURIComponent
必须用在读取时 - 是否包含等号?比如
user=data=123
需要特殊处理
??坑3:浏览器隐私模式失效??
Safari无痕模式、Chrome隐身窗口会默认阻止Cookie存储。测试时务必关闭隐私模式
四、灵魂拷问环节
??Q:为什么我的代码在本地文件(file://)里无法读写Cookie???
因为浏览器默认禁止本地文件操作Cookie,必须通过http/https协议访问页面。可以用Live Server等工具启动本地服务器。
??Q:用Vue/React框架时Cookie怎么处理???
框架不影响底层API!依然可以直接用document.cookie,但推荐封装成hooks或service模块。
??Q:手机浏览器读取有什么特殊限制???
iOS的Safari对第三方Cookie限制更严格,Hybrid应用建议通过WebView注入Cookie。
小编观点
看完这篇还搞不定Cookie的话,建议直接去浏览器控制台敲一遍代码。记住——所有看起来高大上的技术,本质都是处理字符串的套路。下次遇到Cookie问题,先拆字符串,再查编码,最后看权限设置,保准药到病除。