如何实现每日更新Cookie值以追踪用户每周连续访问天数?
需求说明
需要通过Cookie记录用户每周内的连续每日访问次数:首次访问值为1,次日连续访问则累加为2,以此类推;若中断访问则重置为1,每周日之后Cookie自动过期重置。
修改后的实现代码
(function() { const cookieName = "WeeklyAccess"; // 工具函数:根据名称获取Cookie值 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } // 格式化当日日期(仅保留年月日,消除时分秒干扰) const today = new Date(); today.setHours(0, 0, 0, 0); const todayStr = today.toISOString().split('T')[0]; // 读取并解析现有Cookie数据 const cookieData = getCookie(cookieName); let visitCount = 1; let lastVisitDate = todayStr; if (cookieData) { try { const parsedData = JSON.parse(cookieData); const lastVisit = new Date(parsedData.lastVisit); lastVisit.setHours(0, 0, 0, 0); // 计算两次访问的天数间隔 const dayGap = (today - lastVisit) / (1000 * 60 * 60 * 24); if (dayGap === 1) { // 连续访问,次数累加 visitCount = parsedData.count + 1; } else if (dayGap > 1) { // 访问中断,重置次数 visitCount = 1; } lastVisitDate = todayStr; } catch (e) { // Cookie格式异常,强制重置为初始值 visitCount = 1; } } // 保留原逻辑:设置Cookie到期时间为下周六 const nextSaturday = new Date(); nextSaturday.setDate(nextSaturday.getDate() + (7 + 7 - nextSaturday.getDay()) % 7); // 以JSON格式存储访问次数和日期到Cookie const newCookieValue = JSON.stringify({ count: visitCount, lastVisit: todayStr }); document.cookie = `${cookieName}=${newCookieValue}; SameSite=None; Secure; expires=${nextSaturday.toUTCString()}; path=/; domain=.${location.hostname.replace(/^www\./i, "")}`; })();
关键逻辑说明
- Cookie存储优化:改用JSON对象同时存储访问次数和上次访问日期,解决单一数字无法判断连续性的问题
- 连续访问判断:通过计算两次访问的日期间隔,精准识别是否为连续次日访问,对应执行累加或重置操作
- 异常兼容:增加格式异常处理,避免Cookie损坏导致的功能失效
- 周重置逻辑保留:维持原有的下周六到期设置,确保每周自动重置统计周期
内容的提问来源于stack exchange,提问作者Ac fresh 21
相关产品推荐
相关产品推荐

