app->h5同步身份
最近半年主要是进行手机端的开发,主要是H5平台和APP内嵌H5营销活动的支持,相对遇到的兼容性问题比较少些,只是iscroll性能,点透,手机浏览器缓存,手机性能提高。
今天总结下,工作项目中的app->H5应用服务同步身份的问题,在设计的时候,主要登陆退出功能都在APP实现,H5通过伪协议的方式,呼出APP的界面,登陆成功之后,APP再调用相关暴露的js方法。
登陆过程详解
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中
1~5:同A1~5
6. 服务器端,由于登陆tokenn 错误或者 登陆token超时的情况,没有返回登陆账户信息
7.h5服务器ajax返回未登陆
8. 同B相关流程
相关备注
1.cooike 存储最新 有效token 的设计。
主要是为了解决 用户点击后退的情况下面,页面URL上还是原来的token,会导致用户退出,现加入时间戳机制,以最新的为准
2.APP登陆,H5页面显示未登陆,主要是由于app服务器端有效期30分钟导致。
3.后台相关逻辑,以客户端传入的token为准,存在token并与当前登陆的token不同的时候,则先退出
app->h5同步身份的更多相关文章
- Github官方app分析——用户身份验证模块
这篇文章记述的是我对Giuhub官方app的用户身份验证模块的分析. Giuhub的官方app虽然是一个非常小众的程序,但是从程序的设计的角度看,这是一个非常优秀的项目.对于其用户身份验证模块,给我留 ...
- APP H5 混合自动化使用说明 [基于 Appium+Python 系列]
背景 前几天接到H5开发人员那边的业务开发需求单,说想将H5接入到自动化系列中,特此记录分享一下. 环境前置准备 手机与电脑USB连接,开启USB调试模式,通过adb devices可查看到此设备. ...
- AppScan代理扫描app/H5安全测试(没试过,记录在此)
标签: 1.首先设置AppScan代理,设置如下:
- 连接QuickBooks Online实现于IOS App数据同步功能的个人记录
公司项目需要用WebService与QBO实现后台数据同步,由于国内没有做过类似第三方产品接口的资料,前前后后找了N久,终于实现功能,现把实现功能步骤贴上来分享: QBO开发者地址(主要用于创建QBO ...
- hybrid App h5二级页面返回的时候保持与一级页面浏览的位置一致
最近在开发公司hybrid app的时候,需要将原本原生的配置中心模块统一变更为H5,做完之后从测试那里反馈回来这样一个问题,当滑到页面底部或中部的时候进入子页面进行设置,返回的时候页面应该定位到离开 ...
- PC/APP/H5三端测试的相同与不同
随着手机应用的不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与PC端针对这些产品的测试有什么相同与不同之处呢?总结如下: 首先谈一谈相同之处: 一,针对同一个系统功能的测试,三 ...
- [ios] 如何调用其他app h5界面调用打开app
参考资料:app唤醒app h5唤醒app 有趣的URL Scheme 被唤起端需要做的工作(demoApp): 1.设置URL Scheme 只是一个app的标识 具体是什么自己定 一个Sch ...
- 分享一份软件测试项目实战(web+app+h5+小程序)
大家好,我是谭叔. 本次,谭叔再度出马,给大家找了一个非常适合练手的软件测试项目,此项目涵盖web端.app端.h5端.小程序端,可以说非常之全面. 缘起 在这之前,谭叔已经推出了九套实战教程. 但是 ...
- app打包(同步发生冲突)
1:打包步骤: 1:桌面建立一个文件夹,名字叫keystore 2:点击build下面的 ,如下: 3:会出现如下界面: 4:下一步: 5:如果有keystore,请点击 choose exi ...
随机推荐
- Python爬虫学习:一、相关概念与基础知识
爬虫: 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽 ...
- Android开源框架之SwipeListView导入及模拟QQ侧滑
SwipeListView是Github上的一个开源框架,地址:https://github.com/47deg/android-swipelistview SwipeListView was bor ...
- js判断输入的是单字节还是双字节
计算机上每一个字符.数字.汉字.字母等,都对应着unicode编码,unicode编码小于255的为单字节,大于255.小于65535的为双子节或三字节 查看一个字符对应的unicode编码 var ...
- oracle ed命令
今天在弄oracle sqlplus的时候需要写一个存储过程,用ed进入之后,退不出来了. 从网上找到下面的方法处理: 如何退出sqlplus ed操作 今天进入sqlplus ,执行完语句后 ...
- C51变量的存储
一.全局变量和局部变量 全局变量和局部变量的区别在于作用域的不同.此外还有静态全局变量和静态局部变量. 全局变量作用域为全局,在一个源文件中定义,其他的源文件也可以应用.在其他的源文件中使用exter ...
- QProcess进程间双向通信
记得以前写过Linux的C程序, 里面用popen打开一个子进程, 这样可以用read/write和子进程通讯, 而在子进程里则是通过从stdin读和向stdout写实现对父进程的通讯. QProce ...
- java设计模式--结构型模式--桥接模式
桥接模式 概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 适用性 1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系. 例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或 ...
- 转:helloworld:一个完整的WCF案例
原文地址:http://blog.csdn.net/mane_yao/article/details/5852845 WCF的ABC: A代表Address-where(对象在哪里)B代表Bindin ...
- linux----设置、添加别名(alias,unalias)
以下的说明针对centOS. 查看当前的别名 在命令行下,直接输入alias来查看. 添加临时的别名 方法为:alias[别名]=[指令名称] 该方法只是临时的,仅对当前终端有效,因此重启系统或在其他 ...
- MicrosoftSQLServer中的锁模式
在SQL Server数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式,SQL Server中锁模式包括: 1.共享锁 SQL Server中,共享锁用于所有的只 ...