公司有个项目,需求是这样的:
pc 端的项目,有一个步骤可以在手机上操作,页面都在同一个域名下面,但是pc端需要登录(用到了 cookie ),公众号端不需要登录(不用 cookie ) ,不清楚服务端怎么处理的,只知道这时候如果还携带 cookie 服务端会提示一个什么东西(不是重点),前台需要在进去操作的时候先将 cookie 清除掉。

至于这个 cookie 怎么来的,那就有的说道了,将 pc 的地址直接用微信访问,然后登录上去(记录了 cookie ),然后关闭(不是退出,是直接关闭, cookie 没清除),这时候再用公众号访问那其中的一个专门给公众号准备的页面,和 pc 的地址在同一个域名下边,进行操作的时候 cookie 就存在了

解决方案就是公众号端在进行操作的时候,先删除 cookie (设置过期时间 -1),再进行操作,正常来讲,后端应该是收不到 cookie 了,因为 cookie 都过期了,不存在了,但是后端还是能收到 cookie 这就显得稍微的诡异了一点

cookie 是封装好的,先上一份通过测试之后的正确代码,有兴趣的可以往下看看有问题的代码

const setCookie = (name, value, expire = 60*60*24, domain=null) => {domain || (domain = window.location.host);let date = new Date();date.setSeconds(date.getSeconds() + expire);document.cookie = name + " = " + escape(value) + "; expires=" + date.toGMTString()+"; dommain=" + domain + "; path=/";
};
//读取cookie
const getCookie = (name) => {var arr;const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");arr = document.cookie.match(reg);if (arr) {return unescape(arr[2]);} else {return null;}
};
//读取cookie
const readCookie = (name) => {let arr = nulllet reg = new RegExp('(^| )'+name+'=([^;]*)(;|$)')if (document.cookie && (arr = document.cookie.match(reg))) {return unescape(arr[2])} else {return null;}
}const delCookie = (name, domain=null) => {domain || (domain = window.location.host);let exp = new Date();exp.setTime(exp.getTime() - 1);let cval = getCookie(name);if (cval != null) {document.cookie = name + " = " + cval + "; expires=" + exp.toGMTString()+"; dommain=" + domain + "; path=/";}
};
//清除所有cookie
const clearAllCookie = (domain=null)=>{domain || (domain = window.location.host);let date = new Date();date.setTime(date.getTime() - 1);let keys = document.cookie.match(/[^ =;]+(?=\=)/g);if(keys){for(let i=keys.length;i--;){document.cookie = keys[i] + ` = 0; expires=${date.toGMTString()}; dommain=${domain}; path=/`;}}
}
export default {setCookie,getCookie,readCookie,delCookie,clearAllCookie
};

各位小伙伴支持一下博主吧,花呗都还不起了 555!!!

1:打开支付宝扫一扫,扫码领红包
2:领多少红包直接扫码支付输入多少就行,最后是0.00,小编不要多余的一分钱 (ø_ø)

(*  ̄3)(ε ̄ *)

下边是造成 cookie 诡异的代码:
可以看到,也就是 domain 和 path 没携带上,可能是 微信浏览器 这边要求比较的严格吧,但是这一份代码放 pc 端是没问题的

const setCookie = (name, value, expire) => {let date = new Date();date.setSeconds(date.getSeconds() + expire);document.cookie = name + " = " + escape(value) + "; expires=" + date.toGMTString();
};const getCookie = (name) => {var arr;const reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");arr = document.cookie.match(reg);if (arr) {return unescape(arr[2]);} else {return null;}
};
//读取cookies
const readCookie = (name) => {let arr = nulllet reg = new RegExp('(^| )'+name+'=([^;]*)(;|$)')if (document.cookie && (arr = document.cookie.match(reg))) {return unescape(arr[2])} else {return null;}
}const delCookie = (name) => {let exp = new Date();exp.setTime(exp.getTime() - 1);let cval = getCookie(name);if (cval != null) {document.cookie = name + " = " + cval + "; expires=" + exp.toGMTString();}
};
//清除所有cookie
const clearAllCookie = ()=>{let date = new Date();date.setTime(date.getTime() - 10000);document.write(document.cookie);let keys = document.cookie.match(/[^ =;]+(?=\=)/g);if(keys){for(let i=keys.length;i--;){document.cookie = keys[i] + `=0; expires=${date.toGMTString()};PATH=/`;}}
}
export default {setCookie,getCookie,readCookie,delCookie,clearAllCookie
};

微信公众号删除cookie失败,cookie设置了过期时间不管用,微信公众号cookie比较诡异,删不掉,解决办法,原生JS封装cookie统一操作删除cookie,读取cookie,删除cookie相关推荐

  1. 原生js封装cookie插件

    最近迷上了react,用react模拟之前的系统,做登录的时候,发现需要用到cookie,之前用的跟vue搭配的VueCookie,我就在想啊,react应该也会有相应的cookie插件吧!百度一下, ...

  2. cookielifetime php_php中实现精确设置session过期时间的方法

    大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session. ...

  3. 设置session时间 php,php中实现精确设置session过期时间的方法

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一 ...

  4. 微信小游戏服务器数据持久化,微信小程序wx.setStorage数据缓存实现缓存过期时间...

    为了项目性能等方面的考虑,有时候有必要为用户经常访问的页面使用缓存机制:在技术上,服务端和前端都有相应的缓存机制.比如传统的session及cookie等等,在微信小程序中,并没有cookie机制,但 ...

  5. 在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  6. 设置过期时间_在Redis中设置了过期时间的Key,需要注意哪些问题?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:千山qianshan juejin.im/post/5d6b ...

  7. fastjson 添加key value_Redis中设置了过期时间的Key,那么你还要知道些什么?

    来源:http://i7q.cn/4NHBun 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 1. DEL/SET/GE ...

  8. 在 Redis 中设置了过期时间的 Key,需要注意哪些问题?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

  9. 【干货】在Redis中设置了过期时间的Key怎么办?

    熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ...

最新文章

  1. mkdir命令使用详解
  2. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
  3. java 读取svg元素_svg动态添加元素
  4. 设计灵感|简约复古风格海报设计这样玩
  5. MySQL 基础 —— DDL(数据定义)、DCL(数据控制)
  6. CSS样式表操作及选择器定义
  7. 微信小程序——图片打马赛克
  8. Android 端天气预报APP的实现(二)阿里云天气预报API的获取
  9. Spring学习:通过黎活明视频1
  10. html中 为什么在页面点击提交后reset按钮就不起作用了
  11. 清华大学计算机系张昕,程序设计语言的研究与发展——如何推进国内程序设计语言的教育和研究?丨CNCC技术论坛...
  12. Orangleliu的2018年小结
  13. 《善用大脑高效学习》——比尔·卢卡斯
  14. 微信小程序——获取openid
  15. October 20th 2017 Week 42nd Friday
  16. 独特的电子邮箱地址-LeetCode练习(Java实现)
  17. mysql宕机恢复_mysql突然宕机后事务如何处理?
  18. 002 Ubuntu系统设置之调整界面大小
  19. android立体3D效果_PS教程:铝膜气球字制作的完整教程,3D立体效果字体的制作...
  20. TP4056 1A锂电池充电板模块使用方法Type-C USB接口

热门文章

  1. 简述什么是T-SQL
  2. Spring统一日志处理(AOP)
  3. 计算机算法的控制结构顺序结构,第3章 算法与控制结构.pdf
  4. python爬虫实操|爬取nba中国官网球员数据
  5. resultful风格使用方式
  6. 澳洲移民监 盘点一下各国的移民监要求
  7. python爬取实习僧招聘信息字体反爬
  8. Html网页远程控制电脑,如何从Web浏览器远程控制您的计算机 | MOS86
  9. 电脑连接信捷PLC方法
  10. freeBSD 14 CURRENT 笔记本核显独显混合安装 nvidia驱动