小程序用戶身份的標(biāo)識可以使用openid罗晕,如果是多平臺的可以使用unionid控乾,這兩個字段對于一個小程序和用戶而言是固定不變的,基本上是獲取一次與業(yè)務(wù)系統(tǒng)的用戶ID建立對應(yīng)關(guān)系谋减,然后就完事大吉了激蹲。
在實(shí)際使用中用到SessionKey的場景不多。比如用戶信息openid和unionid獲取叁温、用戶手機(jī)號的獲取再悼。前者是wx.login()中通過code就能獲取到,用SessionKey來解密的場景基本上就很少了膝但。但是要是獲取用戶手機(jī)號的時(shí)候就要使用有效的SessionKey冲九。要注意了是“有效”,雖然在獲取SessionKey的時(shí)候有個過期時(shí)間跟束,但是在很多場景下經(jīng)常會出現(xiàn)超時(shí)或已經(jīng)過期的情況莺奸。比如常見的一種情況是用戶信息解密、手機(jī)號解密有時(shí)可以正常解密泳炉,有時(shí)候就不行憾筏。這時(shí)候基本上的問題就是解密用的SessionKey和與加密用的SessionKey不是同一個了嚎杨。
那怎么知道當(dāng)前的SessionKey有沒有過期花鹅,按時(shí)間來算是不行的。小程序提供wx.checkSesstion()這個函數(shù)枫浙,在需要解密之前先判定一下有沒有過期刨肃,如果已經(jīng)過期那么就先wx.login(),這時(shí)再請求加密數(shù)據(jù)(用戶信息或手機(jī)號信息)箩帚,然后做解密操作的時(shí)候就可以正常的使用了真友。
說一下SessionKey管理思路。
調(diào)用wx.login()獲取code紧帕,服務(wù)端根據(jù)這個code和appid和appsecret獲取SessionKey盔然。把SessionKey保存到服務(wù)器上桅打,一般是不在網(wǎng)絡(luò)傳輸,建立自己的SesstionID和生成的SessionKey的對應(yīng)關(guān)系愈案。然后把生成的SessionID傳輸?shù)叫〕绦蚩蛻舳送ξ玻谛〕绦虮镜鼐彺妗T谛枰褂肧essionKey的場景時(shí)先使用wx.checkSession()判定一下有沒有過期站绪,如果沒有過期就把本地的SessionID傳輸?shù)椒?wù)端遭铺,服務(wù)端根據(jù)SessionID查詢對應(yīng)的SessionKey,進(jìn)行后繼的業(yè)務(wù)操作。如果本地判定已經(jīng)過期恢准,那就先wx.login()重新生一次魂挂。
小程序官方給出了一個非常好的時(shí)序圖,感興趣的同學(xué)可以查看文檔了解一下具體的過程馁筐。