背景

客户端和wap端共用一套h5页面。h5页面需要保持登陆状态。

问题

  1. 登陆之后跳转回来是白页。

  2. 无法登陆成功。

  3. 登陆状态无法传递。

问题原因分析

登陆之后跳转回来是白页

造成这个问题的原因是,使用php程序调用客户端的登陆协议,页面没有加载完,导致白页。解决办法就是不再使用php来执行登陆协议,而使用js来进行跳转。用js的好处是,页面已经加载完成,也就不会有白页了,这也是一般应该采用的方法。

这其中有个注意点:不是所有的webview页面都可以调用协议。除非客户端指定了该功能。

无法登陆成功

造成这个问题的原因是,webview页面通过登陆协议,成功之后,会执行webview中的js方法onLogin。但是可能是前人的坑,把这段代码注释了,而我用浏览器里的search搜索还能搜索到,这个坑有点深。

回调里采用ajax向php文件发送请求,在php里写cookie。但是这样的cookie到下次才能生效。

登陆状态无法传递

每打开一个webivew就相当于一个全新的浏览器,生成的cookie无法共用,导致登陆失败。

解决办法

原则:接口的设计应该是无状态的。也就是说,webview页面,作为一种客户端的另类接口,用cookie来保持登陆状态,本身就是不合理的。客户端的接口的权限判断是通过身份验证接口之后,获取到的相关token或者其他方式来进行。

所以这里把客户端和wap的身份验证方式区分开来。wap用cookie,客户端用token。状态存在的本质是获取用户信息,那么如果token能获取到用户信息,也就没有必要使用cookie了。


备注:今天跟客户端的大神聊天。她说同一个webview里打开的页面之间是可以共享cookie的。也就是说如果在一个webview里打开一个h5页面,那么点这个h5页面打开的页面是可以和他的兄弟姐妹页面共享cookie的。