今日全国疫情/优化网址
实际案例:
公司准备在小程序中嵌套H5页面,希望在小程序调用api(wx.request()),然后server端通过api的header设置cookie。因为cookie均是通过http设置或者携带,以为这样,就可以在web-view里通过http请求(xhr或者fetch)带上小程序请求的api中设置的cookie。事实证明too young too naive。小程序没法设置cookie到web-view中。

为什么小程序与web-view与不能共享cookie
小程序的wx.request()是通过jsCore调用系统原生api发起的请求,即便header里带有set-cookie,也不会在web-view对应的'浏览器'中设置cookie,而是由原生应用来处理这个header中的set-cookie,至于怎么操作,要看原生应用了。
比较有趣的是,小程序中的web-view和微信中直接打开的h5,因为用的是同一个浏览器内核,所以,它们的cookie、storage是可以共享的。
web-view中页面如何使用小程序中的cookie
wx.request会返回http header,取到Set-Cookie这个字段,然后使用encodeURIComponent编码一下,通过url传给web-view,在web-view中获取url中的cookie值,并通过document.cookie赋值。
小程序中如何支持cookie
这里推荐一个组件,同时支持微信、头条、百度、支付宝小程序。git仓库地址如下:https://github.com/charleslo1/weapp-cookie。
使用教程:
npm install weapp-cookie --save# 将 npm 包复制到 vendor 文件夹,避免小程序可能不能找到文件(tips:使用 wepy/mpvue 等框架无需此步)cp -rf ./node_modules/ ./vendor/ // app.jsimport './vendor/weapp-cookie/dist/weapp-cookie'// tips: 使用 wepy/mpvue 可以直接在入口 js 引入 weapp-cookie 模块// import 'weapp-cookie'App({ onLaunch: function () { } // ...})
原来的 wx.request 调用方式保持不变,引入后 weapp-cookie 会在底层自动代理 wx.request 的接口访问,以支持 cookie 存储和发送