大家知道,网站对于登录的用户通常要保存他们的状态来提供一些个性化服务。
如果用户通过浏览器访问服务器网站,那么我们可以使用cookie,每次服务器通过cookie中的sessionid来识别当前用户。
可惜的是,小程序是不支持cookie的,那么我们如果有这种需求怎么办呢?别着急,小程序通过wx.request()发送请求的时候可以自定义header头呀!
我们只需要每次向服务器发送请求的时候携带上sessionid就可以了
首先需要让小程序获取到服务端的sessinid,这个可以在小程序初始化的时候就向服务器发起请求,并且将服务器返回的sessionid保存在本地存储中,
接下的问题是这个sessionid有失效时间呀!那么说明我们需要在sessionid失效的时候及时向服务器发起请求,获取新的sessionid,
所以我们可以将这个获取sessionid的方法单独封装一个方法,只要检测到sessionid失效则向服务器发起请求获取sessionid,然后继续发起请求。
那么思路有了
首先需要一个向服务器发起请求获取sessionid的方法
wx.request({//这个请求的作用根据自己的功能来定,
success:function(res){
//其它返回值,
//返回sessionid并将其保存
wx.setStorageSync('-----key--',sessionid)//根据自己返回的数据的格式来定
}
})
//接下来需要将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()方法。