session介紹
由于Http是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要某種機制來識別具體的用戶,實作這個機制的方式就是session,
典型的場景比如購物車,當你點擊下單按鈕時,由于HTTP協議無狀態,所以并不知道是哪個用戶操作的,所以服務端要為特定的用戶創建了特定的Session,用于標識這個用戶,并且跟蹤用戶,這樣才知道購物車里面有幾本書,這個Session是保存在服務端的,有一個唯一標識,
那么服務器端是如何識別特定的客戶的?
每次HTTP請求的時候,客戶端都會發送相應的Cookie資訊到服務端,實際上大多數的應用都是用 Cookie 來實作Session跟蹤的,第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 里面記錄一個Session ID,以后每次請求把這個會話ID發送到服務器,我就知道你是誰了,

下次請求時會帶上sessionId:

實作Session跟蹤需要用到Cookie,如果客戶端的瀏覽器禁用了 Cookie 怎么辦?
一般這種情況下,會使用一種叫做URL重寫的技術來進行會話跟蹤,即每次HTTP互動,URL后面都會被附加上一個諸如 sid=xxxxx 這樣的引數,服務端據此來識別用戶,
實作方式
服務器創建session出來后,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問服務器時,都會帶著session的id號去,服務器發現客戶機瀏覽器帶session id過來了,就會使用記憶體中與之對應的session為之服務,
在程式中第一次呼叫request.getSession()方法時就會創建一個新的Session,可以用isNew()方法來判斷Session是不是新創建的,
session物件默認30分鐘沒有使用,則服務器會自動銷毀session,
當需要在程式中手動設定Session失效時,可以手工呼叫session.invalidate方法,摧毀session,
HttpSession session = request.getSession();
//手工呼叫session.invalidate方法,摧毀session
session.invalidate();
微信小程式使用session時注意的問題
微信小程式不能保存Cookie,導致每次wx.request到服務端都會創建一個新的會話(傳過去的sessionid會變化),小程式端就不能保持登錄狀態了,
一個比較簡單的辦法就是把服務端response的Set-Cookie中的值保存到Storage中,
登錄成功后,添加Cookie:
wx.setStorageSync("cookieKey", res.header["Set-Cookie"]);
然后呼叫介面時,在header中加入:
'Cookie': wx.getStorageSync('cookieKey')
介面呼叫由之前的:
wx.request({
url: 'test.php',
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json'
},
success (res) {
console.log(res.data)
}
})
變為:
wx.request({
url: 'test.php',
data: {
x: '',
y: ''
},
header: {
'content-type': 'application/json' ,
'Cookie': wx.getStorageSync('cookieKey')
},
success (res) {
console.log(res.data)
}
})
歡迎訪問:
易水寒的博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/36807.html
標籤:Html/Css
上一篇:ECharts安裝與使用
下一篇:jQuery 遍歷方法大全
