php setcookie浏览器中看不到的问题

今天遇到一个关于cookie的问题,前端vue(不重要),后端php

php中执行了一段代码,setcookie('name', 'value', time() + 60*60*24*30);

前端执行http请求的时候发现cookie中有两个name,而且值还一样,但是从开发者工具里的application/cookies中看到的只有一个,把看得到的cookie删掉之后,http请求中就有两个name一样,value不一样的cookie了。这就奇怪了

测试看了一下,setcookie实际上是在返回头中加入set-cookie语句。里面有name,value,express。但是开发者工具里的application/cookies中始终只有一个,http中cookie始终有两个。

调试:setcookie的参数有7个,httponly可以使其不可访问,但是可以携带。但是该值默认为false,发现问题再path上,如果写上path为"/",问题就迎刃而解了,开发者工具里的application/cookies中可以看到。

再前端代码中document.cookie="name=value";则path默认为/,如果document.cookie='name=value; path="" ';则path为window.location.pathname,也就是说document设置的cookie必须有path,不设置path默认为/,设置path为空则会替换为window.location.pathname,而后台setcookie实际上是添加header字段,至于不设置path,或者path设置为"",会存放再哪里就不得而知了,因为现在就是没设置path,导致看不到该cookie,只是再http请求中携带了而已。

假如我有两个项目/commonweb/a和/commonweb/b,我在commonweb/a项目中可以设置cookie的path为/commonweb/b,这样commonweb/a中看不到这个cookie,但是切换到/commonweb/b中,看到了/commonweb/a中设置的cookie,这也就解释了为什么path设置为""后,当前项目查看application/cookies看不到,因为不在一个path里面而且不在从属的path里,如果设置path为/commonweb,则/commonweb/a和/commonweb/b中都看得到这个cookie。至于path为“”的cookie去哪里找,肯定不是/index.html。我还真不知道

再说一个chrome设置cookie去删不掉的问题:

chrome设置cookie的domain是,如果传入的是abc.com,浏览器会自动在前面加一个点变成.abc.com

如果不传domain,则是默认域名,abc.com

所以如果要删除abc.com域下的cookie,可以将其设置为过期,但是指定abc.com域的话,chrome会自动加一个点,导致只是新生成一个不同域下的同名的cookie,所以可以再次不指定域,而设置过期

--------------------------------------------------------------------------------------------------------------------------------------

设置document.cookie="uuid=1234;path=/",默认在域abc.com下

设置document.cookie="uuid='';path=/;expires="+new Date(0),就会过期把abc.com下的cookie:uuid删除

--------------------------------------------------------------------------------------------------------------------------------------

设置document.cookie="uuid=1234;path=/;domain=abc.com",默认在域.abc.com下,chrome浏览器在abc.com前面默认加了一个点

设置document.cookie="uuid='';path=/;expires="+new Date(0)+“domain=abc.com"或者document.cookie="uuid='';path=/;expires="+new Date(0)+“domain=.abc.com",就可以把.abc.com域下的cookie:uuid删除

 

php后台使用json_encode($_SERVER)可以看到

\"HTTP_COOKIE\":\"guid=1651152296; co=test; co=test2; co=test3\",

有三个重复的cookie:co

但是用json_encode($_COOKIE)只能获取到重复的cookie的第一个

{\"guid\":\"1651152296\",\"co\":\"test\"}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值