1. 程式人生 > >微信小程式踩坑–設定cookie保持session

微信小程式踩坑–設定cookie保持session

由於每次wx.request()都會先經過微信服務端再到伺服器端,所以每一次request都會建立一個新的session。並且微信小程式是沒有cookie機制的,要維持會話需要自己來儲存cookie,並且請求的時候加上帶有sessionid的cookie。

客戶端向服務端發起請求時,session資訊是存放在cookie中以請求頭的方式帶回給服務端的,而請求頭中具體的資訊就是sessionid。伺服器端通常會在response的header中加上Set-Cookie,以便瀏覽器在header中加上sessionid等資訊。由於微信小程式沒有cookie機制,所以需要人為地儲存Set-Cookie的值,直接加到請求頭中。

wx.request({
url: app.globalData.url+'/user/login',           //login
data: { 
id: objData.userId,
password: objData.userPassword
},
header: { 'Content-Type': 'application/x-www-form-urlencoded' },
method: 'POST',
success: function (res) {
    if (res && res.header && res.header['Set-Cookie']) {
         wx.setStorageSync('cookieKey', res.header['Set-Cookie']);   //儲存Cookie到Storage
    }
}
})
let cookie = wx.getStorageSync('cookieKey');//取出Cookie
let header = { 'Content-Type': 'application/x-www-form-urlencoded'};
if (cookie) {
     header.Cookie = cookie;
}
console.log(cookie)

然後在wx.request()中請求頭直接設定成這個header就行了,需要提一嘴的是,加入Set-Cookie之前的cookie並不直接設定為空,而是

let header = { 'Content-Type': 'application/x-www-form-urlencoded'};

這樣能避免在POST請求中拿不到資料的情況發生。