小程序开发中我们需要获取到后端给的cookie进行请求验证,但是微信并没有帮我们保存cookie,那么我们要维持会话需要自己来保存cookie,并且请求的时候加上cookie
1.获取cookie
在登录请求后读取 返回值的, header的cookie,并本地存储
//登录请求回来之后,读取res的header的cookie //这里的sessionid随便写的,就是个唯一标识 wx.setStorageSync("sessionid", res.header["Set-Cookie"])
2.请求带上cookie
//创建header var header; header = { 'content-type': 'application/x-www-form-urlencoded', 'cookie':wx.getStorageSync("sessionid")//读取cookie }; //进行请求,一般外层都有一个封装,然后放在公共类里边 wx.request({ url: realURL, method: method, header: header,//传在请求的header里 data: datas, success(res) { //请求成功的处理 } )}
3.接下来需要将sessinid在本地管理的方法
var sessionkey; var sessiondate; //可以封装一个保存sessinid的方法,将sessionid存储在localstorage中,定为半小时之后清空此sessionid缓存。 function saveSession(sessionId) { console.log(" now save sessionid: " + sessionId) wx.setStorageSync(“sessionkey” sessionId)//保存sessionid wx.setStorageSync(“sessiondate”, Date.parse(new Date()))//保存当前时间, } // 过期后清除session缓存 function removeLocalSession() { wx.removeStorageSync(“sessionid的key”) wx.removeStorageSync(sessiondate) console.log("remove session!") } //检查sessionid是否过期的方法 function checkSessionTimeout() { var sessionid = wx.getStorageSync(sessionkey) if (sessionid == null || sessionid == undefined || sessionid == "") { console.log("session is empty") return false } var sessionTime = wx.getStorageSync(sessiondate) var aftertimestamp = Date.parse(new Date()) if (aftertimestamp - sessionTime >= SESSION_TIMEOUT) { removeLocalSession() return false } return true } //如果sessionid过期,重新获取sessionid function checkSessionOk() { console.log("check session ok?...") var sessionOk = checkSessionTimeout() if (!sessionOk) { requestsessionid(function () { }) }} //定义一个方法每隔一段时间检查sessionid是否过期 function checkcrosstime() { setInterval(checkSessionTimeout, ----)//这个时间可以自定义。比如25 * 60 * 1000(代表25分钟) }
可以在app.js的onload方法中运行checkcrosstime()方法