qCTtMr9a6

23朵毒蘑菇

记录一下uniapp cookie的问题,app,小程序之间的区别。

遇到个小程序运行的好好的,到app上就提示接口没权限(cookie没带上的问题)

uniapp

2023-09-08 14:46:05 已有版本 1 个 show:0.77kTYPE: blog

公司需求

首先,一个登录很常见的逻辑,调用登录接口成功后,该接口会在返回头上加上set-cookie,然后就由浏览器来操作了,其他满足条件的接口请求头上会给自动加上。

现在不建议用cookie了,反正我自己的东西都没用过这玩意儿,用token令牌的形式感觉更好,更好控制,我想传就传,又不受什么浏览器限制,任何地方调用很简单。

遇到的问题

我调整样式啥的习惯用小程序先调好,app用虚拟机烦得很,因为小程序不会自己去处理返回头的set-cookie,所以下次请求就不会去自动带上了,我的解决办法就是将返回头的set-cookie读取下来然后存在本地,下次请求的时候我手动将请求头上携带上,结果就是小程序可以,app端不行。

解决

找了半天问题,发现是取得时候少取了一个cookie,比如说返回头上有3个set-cookie,代码上获取这些个cookie是从返回头上的cookies上拿的(运行环境的问题,没办法像原始字符串一样获取属性,都是经过处理了的),这是个数组,在小程序上取的话cookies.length 是3,app上cookies.length 是2,我就疑惑了,咋少一个呢,经过对比发现少的那个有个HttpOnly的属性,这个属性大家可以百度一下,意思就是说加了这个属性的,浏览器是不会去让用户操作的,所以在app的运行环境中它不给你读取来,而在小程序的环境中它是给你读出来的,那我想这可咋办呀,于是就去翻uniapp的请求文档,

https://uniapp.dcloud.net.cn/api/request/request.html

发现人家app和h5是一样的,会自动带上cookie,那我直接就把手动处理cookie的代码加上个条件编译只小程序有,这不就解决问题了嘛。

哎,啥都要受限制呀,全是所运行的环境说了算