app->h5同步身份

  最近半年主要是進行手機端的開發,主要是H5平臺和APP內嵌H5營銷活動的支持,相對遇到的兼容性問題比較少些,只是iscroll性能,點透,手機瀏覽器緩存,手機性能提升。html

  今天總結下,工做項目中的app->H5應用服務同步身份的問題,在設計的時候,主要登錄退出功能都在APP實現,H5經過僞協議的方式,呼出APP的界面,登錄成功以後,APP再調用相關暴露的js方法。android

 

登錄過程詳解

  A.在客戶端登錄,進入H5頁面的過程

  1. 客戶端APP向客戶端服務器發起請求,http://***/user/userLogin
  2. 客戶端服務器返回用戶登錄數據(json形式),存在token屬性,存於APP內存, 記爲 登錄token
  3. 用戶點擊H5相關廣告頁面,進入H5頁面,url攜帶 token=加密( 登錄token,手機信息)& tim = 當前客戶端的時間
    (http://**/zero/lottery.html?token=加密(登錄token,手機信息)&sys=android&time=1403243032836)加密(登錄token,手機信息),記爲 加密token
  4. 頁面js根據cookie中的最近有效 加密token 數據時間進行對比
    url中的time< h5_login_token_time, 以h5_login_token進行ajax登錄
    url中的time> h5_login_token_time, 以加密token進行ajax登錄,並更新相應的cookie
    (cookie值描述:「h5_login_token」:最新有效的token;「h5_login_token_time」,相對應的最新有效的時間)
    (http://**/lottery/zero/login?_=1403243629509&sys=android&token=加密token &isCheck=true&_=1403243629509)
  5. h5服務器,接收到加密token,進行解密,得到相關的 登錄token,手機信息,清空當前session信息,經過登錄token調用APP服務器端接口
    POST http://**/user/getUserByToken
    { VERSION : 「1.0」, token: 登錄token }
  6. 客戶端服務器,經過 登錄token查找對應的登錄數據,返回給h5服務器
  7. h5服務器 得到登錄的帳號信息,進行身份信息初始化,記錄對應的session,返回給ajax響應

 

  B.客戶端未登錄

  1. 用戶點擊H5相關廣告頁面,進入H5頁面,url攜帶 token=加密(token0,手機信息)& tim = 當前客戶端的時間
    (http://**/zero/lottery.html?token=加密(token0,手機信息)&sys=android&time=1403243032836)加密(token0,手機信息),記爲 加密token0
  2. 頁面js根據cookie中的最近有效 加密token0 數據時間進行對比:
    url中的time< h5_login_token_time, 以h5_login_token進行ajax登錄
    url中的time> h5_login_token_time, 以加密token0進行ajax登錄,並更新相應的cookie
    (cookie值描述:「h5_login_token」:最新有效的token;「h5_login_token_time」,相對應的最新有效的時間)
    (http:/****/zero/login?_=1403243629509&sys=android&token=加密token0 &isCheck=true&_=1403243629509)
  3. h5服務器,接收到加密token0,進行解密,得到相關的token0,手機信息,token0爲退出信息標示,h5服務器清空當前session信息,ajax返回未登錄
  4. h5經過僞協議mo://27,客戶端顯示登錄界面
    js代碼: window.location.href = "mo://27"
  5. 客戶端APP向客戶端服務器發起請求,http://****/v1/user/userLogin
    客戶端服務器返回用戶登錄數據(json形式),存在token屬性,存於APP內存, 記爲 登錄token
  6. 客戶端app經過native代碼 調用webview中的登錄js函數,將 加密(登錄token,手機信息)加密token 傳入函數,即 ios_page_load(加密token)
  7. js進行處理,此時的加密token即爲最新token, 更新 相應的cookie值進行ajax登錄
    (http:/****/zero/login?_=1403243629509&sys=android&token=加密token &isCheck=true&_=1403243629509)
  8. 同A5
  9. 同A6
  10. 同A7

 

  C.token超時的狀況

  客戶端服務器,token 與session 類似的機制,存在有效期,30分鐘,因此存在客戶端登錄了,在H5中沒有登錄的狀況。即狀況A中ios

  1~5:同A1~5web

  6. 服務器端,因爲登錄tokenn 錯誤或者 登錄token超時的狀況,沒有返回登錄帳戶信息ajax

  7.h5服務器ajax返回未登錄json

  8. 同B相關流程瀏覽器

 

相關備註

  1.cooike 存儲最新 有效token 的設計。緩存

    主要是爲了解決 用戶點擊後退的狀況下面,頁面URL上仍是原來的token,會致使用戶退出,現加入時間戳機制,以最新的爲準服務器

  2.APP登錄,H5頁面顯示未登錄,主要是因爲app服務器端有效期30分鐘致使。cookie

  3.後臺相關邏輯,以客戶端傳入的token爲準,存在token並與當前登錄的token不一樣的時候,則先退出

相關文章
相關標籤/搜索