首页 > 技术文章 > 无法清除cookie中的属性值之对解决问题的思考

yy95 2018-10-22 18:49 原文

关于如何快速解决一个自己知识以外的问题的思考

做好任何事情都是讲究方法的,这是我健身之后的一个领悟,用正确的方式做事,自己的付出才能有价值。

首先分析问题:

   比如我想清除cookie里面的token,我调用了unsetCookie('token'),看下unsetCookie这个方法是怎么写的,为什么调用了没有清除我要清除的token的值(解决问题要有自己的思路),我期望它是什么样的(预期是什么样的),预期是希望调用unsetCookie去重新设置一个为空值的同名的token(要知道自己写的代码都在干啥,逻辑要搞明白),也就是创建一个为空的同名的token去覆盖之前的。

 

然后就是根据问题提出自己的假设:

   调用的方法没有达到预期效果,那猜测是因为没有覆盖,没有覆盖的原因可能是因为不是同一个cookie。

 

验证假设直到验证成功或推翻(思维不要乱,一定要有逻辑的去推和验证):

    如果不是同一个cookie那么调用setCookie应该会新增一条cookie记录,然而现实情况是浏览器中没有看到新增一条,是否和设置的空值有关?浏览器中测试一下,调用setCookie设置一个有值的token,看是否能创建,还是没有看到浏览器中有新的cookie,设置的cookie删除的情况最有可能和设置的过期时间有关,过期时间在当前时间之前,检查一下 设置的过期时间,读出来貌似确实有问题,延长下过期时间,然后再调用setCookie,看到一条新的cookie。

 

验证成功

   确实是新增了cookie,很快就发现浏览器中两条cookie的domain不一致,调用的unsetCookie的cookie的domain多了一个".",锁定问题,domain有问题,看下对应的代码,在直接调用setCookie时没有传domain,在调用unsetCookie时,里面的在调用setCookie时传了domain参数。都不传domain,发现可以覆盖了。

 

搞清楚原因:

   修改cookie,path/domain必须一致,否则会新增cookie,然后再查文档会发现当设置cookie时,如果不指定domain默认cookie的domain会是当前域名(比如:当前域为baidu.com,domain为baidu.com),如果指定了domain,cookie的domain指的是包含当前域名的子域名(domain为:.baidu.com)

 

总结:

   解决问题要有思路,要有自己的一套解决问题的方法。

   解决问题的套路大概总结为如下:

     遇到问题,首先要搞清楚问题是什么,你的代码怎么写的出了什么问题;然后你本来希望是什么样的;为什么和你预期不一样,不一样的可能原因,提出假设;验证假设推成功或推翻。

   多一些耐心多一些思考,相信很多没有遇到过的问题都可以靠自己去找到解决方案。

   写的代码会忘记,但学会的解决问题的能力会是一直伴随自己的财富。

 

   

  

推荐阅读