1. 程式人生 > >【微信點餐】-- 登入登出(分散式系統下的session理論)

【微信點餐】-- 登入登出(分散式系統下的session理論)

  傳統後臺管理,在初始化時會在資料中插入超級管理員的初始使用者使用者名稱和密碼,後續超級管理員通過介面新增普通管理人員的使用者名稱和密碼,普通使用者再在登入介面輸入使用者名稱和密碼完成登入。
  由於賣家端涉及到的人員定位較少,微信的相關特性為重點。因此微信端設定為掃碼登入。在該功能中,專案初始化時,其實是在資料庫中添加了有訪問許可權使用者的openId,這樣微信授權拉取了使用者身份後,如果openId有許可權,則放行,否則拒絕。openId相當於使用者的密碼,使用者名稱不用輸入,掃碼即可。

常規登入登出:

  登入驗證使用者身份,通過後儲存使用者相關資訊及瀏覽狀態,登出本質是使使用者的瀏覽狀態失效。
  至關重要的依賴:session


  分散式下的session:
  分散式系統:旨在支援應用程式和服務的開發,可以利用物理架構由多個自治的處理 元素,不共享記憶體,但通過網路傳送訊息合作。–Leslie Lamport
  突出了分散式的三個特點:

   1.多節點
   2.訊息通訊
   3.不共享記憶體

  易混淆的概念:
  分散式系統,叢集,分散式計算。
  廚房,一個洗菜的,一個炒菜的,就是分散式,兩個都是炒菜的,就是叢集。在本系統中,賣家端買家端,就可以理解為分散式,賣家端同樣的程式部署在多臺伺服器上,就是賣家端叢集。
  不共享記憶體,但通過網路傳送訊息合作的解釋:分散式系統中各個節點是通過傳送訊息來完成通訊的,比如http,Resion介面,Rpc。前端通過resapi訪問後臺程式,獲得介面資料,不共享記憶體:和分散式計算進行區別 這涉及到大資料了,視訊中老師舉的例子是:兩個廚子炒同樣的菜,最後放到一個盤子中合成 一盤菜,這時就分不清哪個菜是哪個廚子炒的。
  分散式系統與叢集的區別和聯絡:


  分散式系統強調不同功能模組的節點,而叢集強調相同業務功能的節點。
  分散式中的每個節點都可以做叢集:賣家端可以部署一個到多個,組成一個叢集。叢集規模由這個節點的業務規模來決定。
  但是叢集並不一定是分散式的,比如:前後端不分離,oninon所有業務模組都在一起,就算好多機器做了叢集,但是這些節點並不需要訊息通訊,所以並不是分散式的。

Session:

  有時候說的session比較狹義,http session,J2EE介面
  針對本系統此時的session:
   廣義:即會話控制,http協議無狀態,對同一個url請求並沒有上下文關係。當用戶完成登入時,需要有一個機制,能夠儲存使用者的資訊和狀態,在後續的請求中能夠驗證使用者的身份和檢查使用者資訊,這個依賴就是會話控制session。
   另一個角度看session:可以理解為一種儲存key-value的機制,session機制中的關鍵點第一是如何設定和獲取key,第二點如何能夠儲存和正確獲取對應的value

  • key: sessionId和token

  • sessionId: 客戶端請求服務端時,服務端通過SetCookie就可以在http頭中設定sessionId的key和對應的value值,
    這裡寫圖片描述
    而客戶端的cookie會將其儲存,後續請求中會自動帶上,

  • token:需要手動在http head頭裡或者url裡設定token這個欄位,伺服器收到請求之後,再從head或url中取出token進行驗證。
      安全方面要求嚴格時:token需配合簽名一起使用。
      無論是sessionId還是token都是全域性唯一的,一個使用者一個標識,本質就是一個key。key對應的使用者資訊就是value;
      無論key或value,一方沒有保持住, 就可能分辨不出使用者的身份,獲取不到使用者的資訊,如依賴sessionId時,使用者進入了cookie,有可能造成系統不斷的讓其重新登入,value一方就可能保持不住,因為:分散式系統中的session問題:使用者請求通過Nginx到達Tomcat,Tomcat部署一個應用,這時session是儲存在這個Tomcat應用的記憶體中。
      那麼當一個Tomcat扛不住時,考慮加多臺Tomcat伺服器,程式該怎麼放?
      水平擴充套件(叢集)或者垂直(拆分服務:A有類目商品和訂單三個服務,分別部署到不同的伺服器上,之後配置Nginx,負載均衡,這樣單臺伺服器壓力會小),或者綜合。
      但是session問題依然存在,如:使用者第一次訪問A伺服器,此時A使用了使用者的session,接著使用者做第二個請求,由於負載均衡,請求可能到了伺服器A1,但是伺服器A1上並沒有使用者的session資訊,所以以為該使用者沒登入。
      通用方案:專門的服務儲存session資訊,其他服務使用session資訊實都找他要。通常用redis叢集或者主從複製去做的。開發測試時單機版即可。這樣無論水平還是垂直, 任何一個應用都可以通過使用者的唯一標識來找到使用者對應的資訊,從而進行後續操作。登入時設定好key,儲存好這個使用者的資訊即value, 登出時讓value失效即可。
    這裡寫圖片描述

相關推薦

-- 登入登出分散式系統session理論

  傳統後臺管理,在初始化時會在資料中插入超級管理員的初始使用者使用者名稱和密碼,後續超級管理員通過介面新增普通管理人員的使用者名稱和密碼,普通使用者再在登入介面輸入使用者名稱和密碼完成登入。   由於賣家端涉及到的人員定位較少,微信的相關特性為重點。因此微信

小程式媒體元件audio

週四沒有課,寫個部落格慶祝一下今天記錄一下audio的基本使用,首先看下效果圖。(聲音請腦補一下~)1.介紹一下audio屬性(來自微信官方文件)屬性名型別預設值說明idStringaudio 元件的唯一識別符號srcString要播放音訊的資源地址loopBooleanfa

小程序獲取輪播圖當前圖片標、滑動展示對應的位數、擊位數展示對應圖片

set spec get auto mage cover 切換圖片 gevent 自動播放 業務需求: 3個圖片輪番播放,可以左右滑動,點擊指示點可以切換圖片 index.wxml: 這裏使用小程序提供的<swiper>組件autoplay:自動播放inter

開放平臺第三方掃碼登入親測可用

開放平臺需要企業認證才能註冊,正好這次公司提供了一個賬號,調通以後,就順便寫一篇部落格吧。 公眾平臺與開放平臺的區別 微信開放平臺 主要面對移動應用/網站應用開發者,為其提供微信登入、分享、支付等相關許可權和服務。 微信公眾平臺 微信公眾平臺用於管理、開放微信公眾號(包括訂閱號、

WEB開發網頁授權第三方登入介面WEB登入

 本文連結至:http://blog.csdn.net/hxker/article/details/50260669 第一步:獲取AppID AppSecret(不做解釋,自己去微信公眾平臺申請) 第二步:生成掃描二維碼,獲取code https://open

定製專屬二維碼思路——實現,QQ掃碼登入

效果演示 1.先在natapp實現外網對映(https://natapp.cn) 2.natapp.exe

uniapp 開發小程式簡陋登入模組

<script>      export default {   

小程序怎麽弄的?

微信點餐小程序 點餐收銀系統 微信小程序點餐系統它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點餐下單,從而節省

你還不知道小程序怎麽弄嗎?

微信點餐小程序 微信點餐系統 “微信小程序點餐系統”它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點餐下單,從而節

教你如何做小程序

微信點餐小程序 快餐點餐系統 蛋糕點餐系統 微信小程序點餐系統它有什麽優勢?能給餐飲商家帶來什麽效益? 1、顧客下單後,訂單直接同步至後廚,省去溝通成本,控制出錯率,降低用餐高峰期餐廳服務壓力。 2.非高峰期,顧客在入座後,亦可輕松掃桌上二維碼,直接點

小程序解決 豎向<scroll-view>組件 “豎向滾動頁面出現遮擋”問題

ane -c system cti cnblogs con ons 原因 strong 問題圖: 問題原因: <scroll-view class="scroll-container" upper-threshold="{{sortPanelDist}}" s

小程序拉刷新真機測試無效

boolean ble bottom lld 開發者 開發 blank ges art 根據文檔的描述,做上拉加載時直接實現頁面的onReachBottom()函數即可。但是要做下拉刷新時,除了實現onPullDownRefresh()函數外,還必須要在app.json中

小程序--bindtap參數傳遞,配合wx.previewImage實現多張縮略圖預覽

function src highlight enter lda glob get 使用 入參 本文為原創隨筆,純屬個人理解。如有錯誤,歡迎指出。 如需轉載請註明出處 在微信小程序中預覽圖片分為   a、預覽本地相冊中的圖片。   b、預覽某個wxml中的多張圖片。 分

小程序:小程序,新場景

容量 也好 優惠券 是你 ada 前段時間 tor 能夠 相對 前言: 我們頻繁進入的地方,是場景。手機。是場景;瀏覽器。是場景。事實上,微信,也是場景……

Spring Boot企業系統-第一章-課程介紹

win maven 開發環境 ast 介紹 前端 pri 系統 詳細說明 一、項目簡介——技術要點 前端和後端: 後端主要技術: 微信接口技術 微信支付 微信掃碼登錄 微信模板消息推送 開發環境 但實際上我用的環境和這上面還是有點不一樣,我服務器用的是win,到

小遊戲小遊戲開發調試--關於找不到app.json入口文件

com png info alt 微信開發者 遊戲 進入 http 找不到 經了解發現 小程序必須要有app.json 小遊戲必須的文件只有2個 game.js  小遊戲入口文件 game.json  小遊戲配置文件 所以不是工程文件缺失,解決方案如下: 進入微信開發者工具

小遊戲關系鏈數據概念篇

index weixin req span 包括 lis 數據包 遊戲 幀率 一、前提   微信小遊戲主打社交玩法,為了豐富社交玩法我們肯定會用到關系鏈數據來做好友排行幫,群排行榜等功能。本篇主要介紹概念同時劃重點,下一篇Cocos Creator中實戰。 二、概念

小遊戲排行榜實戰版

-m ssa href ubd prope inpu pro 關閉按鈕 語言 一、前提 微信小遊戲主打社交玩法,為了豐富社交玩法我們肯定會用到關系鏈數據來做好友排行幫,群排行榜等功能。本篇主要介紹Cocos Creator中排行榜的實現,上一篇微信小遊戲排行版概念篇。

裂變程序不需公眾號!免接口影視裂變系統正式上線!

target tao kit 實現 jpg cin orm 朋友 fff 濤舅舅免接口影視裂變系統,不需要公眾號接口的限制即可分享裂變 以我們長期以來的驗證,本系統具有以下亮點: 同時完美支持電影和電視劇,可以設定劇集鏈接結構完全隨機,減少被抓取特征

學習後的一些命令總結

壓測命令: apache ab ab -n 100 -c 100 http://192.168.0.1 ab -t 60 -c 200 http://192.168.0.1 maven 打包命令: maven clean package -Dmaven.test.skip=tru