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。我还真不知道

猜你喜欢

转载自blog.csdn.net/youyudexiaowangzi/article/details/87867742
今日推荐