记录一下自己在php中设置cookie遇到的一个问题

我在开发过程中,想从php请求接口中就设置完cookie,然后客户端发送请求之后,不用使用document.cookie来设置cookie,但是在这个过程中,遇到了这个问题。

开始我弄了一个简单的测试页面(ceshi.html)和一个用thinkphp5弄得简单得php接口,然后开启了本机的nginx,页面的地址是http://localhost/dist/ceshi.html,接口的地址是http://localhost:4100/index/index/testAxios,具体代码如下:

这是ceshi.html的使用axios发送的post请求,

const postData = new URLSearchParams();
    postData.append('driverName', 'xiaorenyi');
    postData.append('phone', '18100171354');
    axios.post('http://localhost:4100/index/index/testAxios', postData, {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    }).then(
        res => {
            console.log(res);
            onsole.log(document.cookie);
        },
        err => {
            console.log(err);
        }
    )

这是php接口代码:

public function testAxios()
    {
        // $name = Request::instance()->post('driverName');
        $res = setcookie('worldludan_keys', 'HelloWorld', time() + 14400, '/');
        echo $res;
    }

做好这两个东西的准备,我就进入了愉快的测试之旅,打开浏览器输入http://localhost/dist/ceshi.html,因为请求是打开浏览器时就自动发送的,所以打开F2,在network中查看到请求已经发送成功,并且有相应的响应数据。但是,但是,我发现cookie并没有我想要的worldludan_keys,度娘了很久,也按照很多帖子进行了修改,有帖子说,你设置cookie的有效期是不是过期了,还有的时setcookie第四个参数path设置的问题,试了很多解决方法,都没有解决掉我的问题。

机缘巧合,我直接在浏览器地址栏输入http://localhost:4100/index/index/testAxios,而不是通过ceshi.html页面去发送请求,这时候我发现cookie成功设置了。我检查了一下两个不同方式的network,区别在于这两种方式的Request Headers(请求头信息)是不一样的,贴上:

这是http://localhost/dist/ceshi.html的请求头信息,

这是http://localhost:4100/index/index/testAxios的请求头信息,

其实我也不知为什么两者的请求头信息差别这么大(希望一些大佬可以给小弟一些解答,感谢~~)。

我们回归正题,看着两个的请求头信息,我突然猜测可能是因为这个请求接口是在 :4100 端口下,所以我setcookie的path="/"会不会有可能只有在4100端口下才可能成功设置cookie呢。

怀着这个猜测,我尝试着把我本地nginx配置改了一下:

location /tp/ {
    rewrite /tp/(.*) /$1 break;
    proxy_pass http://127.0.0.1:4100;
    proxy_set_header Host 127.0.0.1:80;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

就是就是将4100端口重写了到了/tp路径下,就是当访问http:localhost/tp时,会定向到http://localhsot:4100下,这是我们把接口地址,修改成http://localhost/tp/index/index/testAxios,再一次的在地址栏中输入http://localhost/dist/ceshi.html,此时,cookie就成功设置了。

对此我自己的理解时,path为"/"的时候,就会是在80端口下,所以无论是 /dist 还是 /tp ,都是80端口的子目录路径,所以就设置成功了。

因为是菜鸟程序员,所以可能对其中原理的理解不是很透彻,也不知道这么解释是不是正确的,希望有大牛可以指出不对的地方。希望能对遇到相同问题的人给点帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值