js-cookie如何读取Cookie的expires属性并用于条件判断
核心原因
别白费功夫试了,Cookies.get()从设计上就拿不到expires、path这类Cookie属性——这不是库的bug,是浏览器本身的安全限制:前端JS通过document.cookie只能拿到Cookie的键和值,所有元属性(过期时间、作用路径、域名、Secure、HttpOnly标记等)前端根本读不到。
你写的Cookies.get(['expires'])完全是用错了API:给get传数组是批量取多个Cookie值的写法,比如传['a','b']会返回a、b两个Cookie的值组成的对象,和读属性半毛钱关系没有。
可行解决方案
根据你的使用场景选对应方案即可:
- 场景1:Cookie是你自己在当前前端逻辑里主动设置的,后续同一段逻辑里要用到设置时的属性值
直接把设置Cookie的配置对象单独存成变量,后续要取属性直接读这个变量就行,示例代码:// 单独存配置对象 const cookieOpt = { expires: 30, path: '/' }; Cookies.set('newsletter', 'show', cookieOpt); const myCookie = Cookies.get('newsletter'); if(myCookie){ // 直接从存好的配置里拿expires值 const expiresVal = cookieOpt.expires; console.log(expiresVal); // 输出30 // 后续条件判断直接基于这个值写就行 } - 场景2:需要跨页面/跨脚本获取之前设置的Cookie属性,或者要读后端种下的Cookie的过期时间
前端没有原生方法可以直接读取,两种可落地的方式:- 设置Cookie时把需要用到的属性值直接序列化存入Cookie的value中,读取时解析value拿到对应值,示例:
const expireDays = 30; const expireTimestamp = Date.now() + expireDays * 24 * 60 * 60 * 1000; // 把业务值和需要用到的属性一起存在Cookie值里 Cookies.set('newsletter', JSON.stringify({ status: 'show', expireAt: expireTimestamp }), { expires: expireDays, path: '/' }); // 读取时解析 const myCookie = Cookies.get('newsletter'); if(myCookie){ const cookieData = JSON.parse(myCookie); console.log('过期时间戳:', cookieData.expireAt); // 条件判断示例:判断是否距离过期不足1天 if(cookieData.expireAt - Date.now() < 24 * 60 * 60 * 1000){ console.log('Cookie即将过期'); } }- 如果Cookie是后端种下的,直接让后端提供对应接口返回Cookie的过期时间等属性信息。
额外提醒:
document.write是已经被废弃的API,执行时会覆盖整个页面的已渲染内容,日常开发不要使用,需要输出内容优先使用DOM操作方法或者控制台打印。
内容的提问来源于stack exchange,提问作者4midori
相关产品推荐
相关产品推荐

