开发者社区> 问答> 正文

cookie设置无效,救助

响应头信息中已经有:

Set-Cookie mycookie=9B106E8F0363BB269EBE9A6B0D3855E7646410BF; Domain=.sea.com; Expires=Fri, 30-Nov-2012 13:13:02 GMT; Path=/; Secure

但是为什么却没有设置成功呢?

设置之后,java后台接收不到该cookie,请求头信息没有发现设置的cookie信息

展开
收起
huc_逆天 2020-05-28 09:19:43 1183 0
1 条回答
写回答
取消 提交回答
  • 首先遇到的第一个坑就是发现cookie删不掉。 当然,这里说明一下,并不是js或者浏览器本身的机制不允许删除cookie,只是我删除的方式不对。

    一开始我只是简单的将cookie设置为空,将expires设置为-1。心里想着,已过期,cookie自动清除,美滋滋,然而事实并没有按照我想的发生。downloading还是躺在cookie里面没有任何变化,是因为没有刷新吗?于是我在后面再次获取了一下:

    console.log(document.cookie); 发现cookie里面确实还是有downloading这个字段。

    没办法,打开application看看,果然发现了问题,后端传递过来的这个cookie没有设置expires,但是却默认设置了path,再联想我之前删除的cookie是没有带任何参数的,结合cookie的机制,发现了问题所在。

    解决办法:

    在删除cookie的时候要加上这个字段所带的参数,可能是出于安全的考虑,不同的参数,即使名字相同,也会当成两个cookie存储,所以我删除的并不是后端传过来的cookie,自然就删除不了。

    第二个坑,后端设置cookie默认的path属性没有规律。 出于代码复用和性能考虑,后端的很多功能都会集成到一个API,再加上前端可能会用到一些第三方的框架,这些框架所采用过的设计模式都各不相同,都会造成一些不可预测的结果,而项目有可能在任何地方都会有下载的需求,所以当我发现如何删除cookie的时候,我又发现了一个坑,那就是不知道该如何准确获取cookie的path属性。而且如果你请求的接口默认path与你所在的url不匹配的话,浏览器将会忽略这次的cookie设置,在我的项目的直接体现就是,后端响应了cookie,但是我前端接收不到,页面loading无法消失,卡死了。

    解决办法:

    根据cookie的机制,当cookie的path属性为'/'的时候,cookie就不会被忽略。

    所以解决办法就是让后端在set-cookie的时候讲path设置成固定的'/',以java为例:

    Cookie cookie = new Cookie("Downloading","true"); cookie.setPath("/"); response.addCookie(cookie);

    2021-02-22 17:43:50
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载