切沃vs卡塔尼亚

當前位置:網站首頁 > 資訊中心 > 業界資訊

上海網絡公司程序員介紹微信小程序用戶登錄態的控制問題
來源:上海真略網絡科技有限公司 發布時間:2018-08-06瀏覽

  微信小程序的用戶登錄態是如何進行維護的?.這樣一個方法。但是并不具體,很多用戶看了之后并不知道應該怎么樣去做。今天我們就詳細的分析如何去做,當然我不會直接分享代碼,因為程序代碼因人而異,你可以這樣寫,我可以那樣寫。所以我只分享原理,介紹方法,至于具體的編程實現,相信對于正在閱讀這篇文章的你不算什么。

徐州網絡公司程序員介紹微信小程序用戶登錄態的控制問題


  好了廢話不多說,下面進入干貨時間:

  之前有玩家想使用永不過期的opind來進行用戶登錄態的維護,但是導致了很多問題:

  一:永不過期的openid一旦被截取,那么這個用戶的所有數據就全部透明了!這是非常危險的!!!

  二、如果使用永不過期的openid緩存在本地來維護用戶登錄態會導致用戶數據亂傳!何為亂傳,用戶A使用小程序獲取到了opid并緩存,如果這時候用戶在同一設備切換了微信賬號用戶B,再次進入微信小程序,這時候已經有緩存的用戶A的openid,這時候就不會提示登錄。這時候用不B就使用的是用戶A的數據!這也是非常危險的!!!

  好了,看來我們還是使用微信官方推薦的使用自定義3rdsessionid來解決了。

  維護3rd_session需要一個內存數據庫,這里我選用了redis

  維護會話態是內存數據庫的典型應用場景,畢竟量小,并且要求速度快,這么一個小應用,當然也可以自己在內存中維護一個對象來進行會話id的處理,但是肯定難以跟一個成熟的系統相媲美

  拋開代碼實現,這似乎就是一句話可以概括的事情,生成一個唯一的隨機串sessionid,以此為key,openid和微信方的session_key為value存入redis,并把sessionid傳回給客戶端。

  但是,翻遍小程序的官方文檔,除了一句據說的wx.checkSession對開發者來說是透明的,并沒有小程序登錄態何時過期的具體說明,如何才能同步前后端的會話過期時間呢?

  前后端會話過期時間同步

  如果wx.checkSession檢測到會話失效,那么帶上已經緩存在本地的sessionid(如果有的話),重新發起登錄請求,后臺從code2session中拿到新的請求結果后,生成新的隨機sessionid并入庫reids,并且把老的sessionid移除(如果有的話)

  當然不移除也不會帶來什么功能上的影響,但是會存在兩個問題,首先,跟使用open_id作為登錄憑證一樣,舊的sessionid永不過期,其次,無用的session數據占用redis資源,會拖垮訪問性能。

  為了統計使用小程序的用戶數,需要一個表來保存用戶數據,后臺提供一個接口,讓小程序將用戶數據傳上來進行一個注冊操作,當然可以把這個功能合并到登錄接口上,每次登錄都把前端小程序獲得的微信用戶數據帶上,如果發現數據庫中還沒有該用戶的信息,則進行入庫操作

  不難發現,其實只需要用戶第一次登錄的時候注冊一次就行了,所以上述方法雖然簡便,但是有點浪費帶寬,所以應該額外提供一個注冊接口,登錄接口只需要返回一個用戶是否已經注冊的標志,讓客戶端決定是否需要獲取用戶信息,進行注冊操作(當然后臺也不會讓同一個用戶重復入庫)

  那么問題就變成如何判斷用戶是第一次登錄了:

  1)判斷登錄請求中有沒有帶上sessionid,如果沒帶上,肯定是第一次登錄;如果帶上了就是登錄過的用戶?不,別忘了,前面說過,用戶可能會在同一設備切換賬戶,那就有可能在登錄接口中帶上了別人sessionid,那并不能表明用戶曾經登錄過

  2)通過帶上來的sessionid從redis中拿到openid,跟在code2session新請求到的openid進行比對,如果一致,可以證明用戶曾經登錄過,否則,仍需要用戶進行注冊

  總結

  時間是浪費了那么一些,但是進過思考摸索,代碼肯定更完備了~~

  感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

在一切開始前,說說您的需求

  • 江蘇省徐州市淮海西路120號穎都大廈11F

  • 咨詢電話:400-622-8891

  • QQ咨詢:603233758

  • 上海靜安區平型關路金贏108創意廣場銀座18樓

  • 咨詢電話:400-622-8891

  • QQ咨詢:603233758

  • 江蘇省南通市崇川區崇川路58號

  • 咨詢電話:400-622-8891

  • QQ咨詢:603233758

?Xuzhou billion net technology Co., Ltd. 上海真略網絡科技有限公司 版權所有 蘇公網安備 32031102000431號 蘇ICP備12060089號
上海app制作上海app定制開發上海app開發 專家首選上海真略!

切沃vs卡塔尼亚 时时彩选号算法 河北时时玩法 时时二星在线缩水 广东11洗5走图表 pk10算法加减5公式 快速赛结果 61彩票怎么中奖规则 全天一分赛计划 北京快乐8软件手机版 棋牌APP 冠亚和值套利 扑克两张牌推锅玩法 重庆时时五星走势图 七乐彩星期一走势图 美女捕鱼图片大全