提问人:Rory L. 提问时间:8/11/2021 更新时间:9/4/2021 访问量:554
为什么删除 cookie 可以在 localhost 而不是我们的 https 站点中工作?
Why does removing a cookie work in localhost and not our https sites?
问:
我的团队正在将PHP代码转换为React,我们目前将两个“不同”的站点拼接在一起。登录过程命中 PHP,使用 JWT 设置一个 cookie,然后重定向到其中一个 React 页面。当通过 React 页面注销时,我们可以在 localhost 中删除 cookie,但在我们的任何 https 站点上实时部署时,相同的代码不起作用。这些是我尝试过的不同变体:
document.cookie = cname + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
document.cookie = "[COOKIE NAME]= ;domain=[DOMAIN]; expires = Thu, 01 Jan 1970 00:00:00 GMT;";
document.cookie = "[COOKIE NAME]= ;domain=[DOMAIN];path=[PATH]; expires = Thu, 01 Jan 1970 00:00:00 GMT;";
document.cookie = "[COOKIE NAME]= ;expires = Thu, 01 Jan 1970 00:00:00 GMT;";
document.cookie = "[COOKIE NAME]= ;maxAge=-99999999;";
document.cookie = document.cookie.split(';').filter(c => !/^\s?[COOKIE NAME]=/.test(c)).join(';');
这些是我在搜索过程中找到的各种解决方案。我什至研究了 react-cookie 的代码,他们正在使用这个技巧。expires
字典:
- COOKIE NAME = COOKIE 的名称 (obv)
- DOMAIN = 在“应用程序”选项卡中查看 Cookie 时在“域”列中列出的值
- PATH = 在“应用程序”选项卡中查看 Cookie 时在路径列中列出的值
答:
0赞
Rory L.
9/4/2021
#1
因此,经过数周的调查,我终于找到了解决方案。
PHP 正在创建具有模式域的 cookie。我注意到,当且仅当 cookie 具有具有前导句点 (.) 的域时,我才能在控制台中更改 cookie。我切换了 PHP,在创建 cookie 时向域添加前导句点,现在 React 能够操作它们。dev.mysite.com
注意:我愿意接受人们告诉我这是一个糟糕的主意,但这个解决方案对我们有用。
评论