最近半年主要是進行手機端的開發,主要是H5平臺和APP內嵌H5營銷活動的支持,相對遇到的兼容性問題比較少些,只是iscroll性能,點透,手機瀏覽器緩存,手機性能提升。 php
今天總結下,工做項目中的app->H5應用服務同步身份的問題,在設計的時候,主要登錄退出功能都在APP實現,H5經過僞協議的方式,呼出APP的界面,登錄成功以後,APP再調用相關暴露的js方法。 css
登錄過程詳解
A.在客戶端登錄,進入H5頁面的過程
- 客戶端APP向客戶端服務器發起請求,http://***/user/userLogin
- 客戶端服務器返回用戶登錄數據(json形式),存在token屬性,存於APP內存, 記爲 登錄token。
- 用戶點擊H5相關廣告頁面,進入H5頁面,url攜帶 token=加密( 登錄token,手機信息)& tim = 當前客戶端的時間
(http://**/zero/lottery.html?token=加密(登錄token,手機信息)&sys=android&time=1403243032836)加密(登錄token,手機信息),記爲 加密token
- 頁面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)
- h5服務器,接收到加密token,進行解密,得到相關的 登錄token,手機信息,清空當前session信息,經過登錄token調用APP服務器端接口
POST http://**/user/getUserByToken
{ VERSION : 「1.0」, token: 登錄token }
- 客戶端服務器,經過 登錄token查找對應的登錄數據,返回給h5服務器
- h5服務器 得到登錄的帳號信息,進行身份信息初始化,記錄對應的session,返回給ajax響應
B.客戶端未登錄
- 用戶點擊H5相關廣告頁面,進入H5頁面,url攜帶 token=加密(token0,手機信息)& tim = 當前客戶端的時間
(http://**/zero/lottery.html?token=加密(token0,手機信息)&sys=android&time=1403243032836)加密(token0,手機信息),記爲 加密token0
- 頁面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)
- h5服務器,接收到加密token0,進行解密,得到相關的token0,手機信息,token0爲退出信息標示,h5服務器清空當前session信息,ajax返回未登錄
- h5經過僞協議mo://27,客戶端顯示登錄界面
js代碼: window.location.href = "mo://27"
- 客戶端APP向客戶端服務器發起請求,http://****/v1/user/userLogin
客戶端服務器返回用戶登錄數據(json形式),存在token屬性,存於APP內存, 記爲 登錄token。
- 客戶端app經過native代碼 調用webview中的登錄js函數,將 加密(登錄token,手機信息)加密token 傳入函數,即 ios_page_load(加密token)
- js進行處理,此時的加密token即爲最新token, 更新 相應的cookie值進行ajax登錄
(http:/****/zero/login?_=1403243629509&sys=android&token=加密token&isCheck=true&_=1403243629509)
- 同A5
- 同A6
- 同A7
C.token超時的狀況
客戶端服務器,token 與session 類似的機制,存在有效期,30分鐘,因此存在客戶端登錄了,在H5中沒有登錄的狀況。即狀況A中 html
1~5:同A1~5 android
6. 服務器端,因爲登錄tokenn 錯誤或者 登錄token超時的狀況,沒有返回登錄帳戶信息 ios
7.h5服務器ajax返回未登錄 web
8. 同B相關流程 ajax
相關備註
1.cooike 存儲最新 有效token 的設計。 json
主要是爲了解決 用戶點擊後退的狀況下面,頁面URL上仍是原來的token,會致使用戶退出,現加入時間戳機制,以最新的爲準 瀏覽器
2.APP登錄,H5頁面顯示未登錄,主要是因爲app服務器端有效期30分鐘致使。 緩存
3.後臺相關邏輯,以客戶端傳入的token爲準,存在token並與當前登錄的token不一樣的時候,則先退出