因為小程序原生不支持Cookie,因此也不支持Session。
網上找到的的一些方法有缺陷,而且很多累贅,估計沒有實際測試過,在此直接給出實測可用的代碼。
大概思路就是借助小程序本地儲存+網絡請求的header可讀可寫來實現類似瀏覽器的cookies保存session功能。
直接上代碼
function NetRequest({url, data, success, fail, complete, method = "POST", header = { 'Content-type': 'application/x-www-form-urlencoded' }}) { let session_id = wx.getStorageSync('PHPSESSID');//本地取存儲的sessionID if (session_id != "" && session_id != null) { //本地session存在,則放到header里 header.Cookie = session_id; } wx.request({ url: url, method: method, data: data, header: header, success: res => { //發現response有Set-Cookie,說明本地的PHPSESSID需要更新或不存在: if(res.header["Set-Cookie"]){ wx.setStorageSync('PHPSESSID', res.header["Set-Cookie"]); } res['statusCode'] === 200 ? success(res.data) : fail(res) }, fail: fail, complete: complete })}
其他語言的Session類似方法皆可實現。
PS:下面看下徹底解決小程序無法獲取SESSION問題
最近在開發小程序,發現小程序是通過微信服務器觸發我們服務器,所以每次請求獲取到的session_id都不同,導致小程序中無法獲取session,這樣我就想如果session_id不發生變化,那么session是否可以使用呢???
查看了一下小程序的開發文檔(wx.request);
發起網絡請求中有一個header參數,
我們可以通過header傳遞一個固定參數到后臺,
作為session_id,這樣sesion_id不發生變化,
微信小程序中就可以使用或觸發session了。
一、首先找到第一次發起網絡請求的地址,將服務器返回set-cookie當全局變量存儲起來
wx.request({ ......//此處省略 success: function(res) { console.log(res.header); wx.removeStorageSync('sessionid') //必須先清除,否則res.header['Set-Cookie']會報錯 //set-cookie:PHPSESSID=ic4vj84aaavqgb800k82etisu0; path=/; domain=.zhix.net // 登錄成功,獲取第一次的sessionid,存儲起來 // 注意:Set-Cookie(開發者工具中調試全部小寫)(遠程調試和線上首字母大寫) wx.setStorageSync("sessionid", res.header["Set-Cookie"]); }})
二、請求時帶上將sessionid放入request的header頭中傳到服務器,服務器端可直接在cookie中獲取
wx.request({ ...... header: { 'content-type': 'application/json', // 默認值 'cookie': wx.getStorageSync("sessionid") //讀取sessionid,當作cookie傳入后臺將PHPSESSID做session_id使用 }, success: function(res) { console.log(res) }})
三、后臺獲取cookie中的PHPSESSID,將PHPSESSID當作session_id使用
<?php// 判斷$_COOKIE['PHPSESSID']是否存在,存在則作session_idif ($_COOKIE['PHPSESSID']) { session_id($_COOKIE['PHPSESSID']);}session_start();echo session_id();
總結
以上所述是小編給大家介紹的微信小程序實現Session功能及無法獲取session問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
新聞熱點
疑難解答