實際案例:
公司準備在小程式中巢狀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中頁面如何使用小程式中的cookiewx.request會返回http header,取到Set-Cookie這個欄位,然後使用encodeURIComponent編碼一下,通過url傳給web-view,在web-view中獲取url中的cookie值,並通過document.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 儲存和傳送
最新評論