如何用JS实现每小时检查创建cookie,存在则每分钟跳转指定页面
实现方案
原代码存在的问题
- 未校验cookie是否存在就直接赋值,每次执行都会覆盖原有cookie
- 未给cookie设置过期时间,默认是会话有效期,关闭浏览器就会自动清除,无法支撑每小时校验的需求
- redirect函数内部直接同步递归调用自身,会触发调用栈溢出,无法正常执行定时逻辑
- 两个定时逻辑(每小时检查cookie、每分钟跳转)没有拆分,执行时序混乱
修正后代码
// 封装获取指定cookie的工具函数 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } // 校验并创建cookie的逻辑 function checkAndCreateCookie() { const targetCookie = getCookie('createCookie'); if (!targetCookie) { // cookie不存在,创建时设置1小时过期 const expireTime = new Date(); expireTime.setTime(expireTime.getTime() + 60 * 60 * 1000); document.cookie = `createCookie=ok; expires=${expireTime.toUTCString()}; path=/`; } } // 跳转逻辑 function startRedirectTask() { setInterval(() => { const hasCookie = getCookie('createCookie'); if (hasCookie) { // 存在cookie则跳转,此处替换为你自己的目标页面地址即可 window.location.href = '你的目标页面地址'; } }, 60 * 1000); // 每分钟执行一次 } // 初始化执行 checkAndCreateCookie(); startRedirectTask(); // 每小时执行一次cookie校验,和过期时间对齐 setInterval(checkAndCreateCookie, 60 * 60 * 1000);
逻辑说明
- 先封装独立的cookie读取工具,避免直接读取整个cookie字符串做判断的误差
- 创建cookie时明确设置1小时过期,和校验周期对齐
- 用setInterval替代递归调用实现定时执行,避免栈溢出问题
- 拆分两个独立的定时任务,分别处理每小时cookie校验、每分钟跳转的逻辑,互不干扰
内容的提问来源于stack exchange,提问作者shir
相关产品推荐
相关产品推荐

