微信小程式開發:http請求的session管理
作為一個開發JavaWeb應用的程式猿,都喜歡將使用者登入後的使用者資訊(比如說使用者id,使用者名稱稱)放入session中儲存,之後在業務邏輯的開發中需要用到使用者資訊的時候就可以輕鬆又方便的從session中取到值。最近在開發微信小程式的時候碰到一個問題就是每次微信小程式請求的時候都會改變sessionid,這就會導致在後面的請求中取不到登入時儲存在session中的使用者資訊,其實在前後端分離開發的時候也會碰到這個問題,後端程式設計師負責伺服器端開發,提供介面程式,前端程式設計師負責客戶端開發,呼叫後端程式設計師提供的介面程式獲取資料,此時,前端程式設計師請求的每個介面程式也是都會改變sessionid的,因些也無法獲取到登入時儲存在session裡的使用者資訊。
常見的session保持方式是,當瀏覽器向服務端發起http請求時,服務端檢查在http頭部cookie引數裡是否包含sessionid,如果有sessionid就根據sessionid去檢視儲存在伺服器端的session,session裡儲存的當前會話的一些資訊。如果sessionid沒有服務端就會分配一個,寫到cookie欄位裡,瀏覽器下次發起其它請求的時候帶上。
因此,為了解決上面我說的問題,我們可以這樣做,客戶端在第一次請求伺服器時,也就是登入的時候獲得一個sessionid,在本地儲存起來,然後在之後每次請求伺服器的時候就在header裡面帶上這個sessionid,寫到cookie欄位裡。但是有個問題就是,你本地儲存了這個sessionid後那麼以後每次都會是這個sessionid,所以建議在程式每次啟動的時候先清空本地儲存的sessionid,然後傳送首次請求獲取新的sessionid。
如下為ajax請求時在header中帶上sessionid的客戶端程式碼:
$.ajax({
type: 'post',
headers: {
'Cookie':'JSESSIONID=1k2naixut68f81q5rpr0c3n4vc'
},
data: {},
dataType: 'json',
timeout: 30000,
url: '/test',
success: function (res) {
alert("success" );
},
error: function (e) {
alert("false");
}
})