1. 对话保持的解决方案。
要求:
1、app中使用webview访问具体网站的内容,但是app与服务器的沟通是使用HttpUrlConnection来完成。
2、webview访问时不需要再次登陆,继承app的登陆状态。
对话未保持的现象:
1 2 |
1、 虽然app已经登录服务器,但是在webview中还是提示需要登录。 2、app下一次对服务器的请求也会失败,提示session过期。 |
解决方案:
1、获取到HttpUrlConnection中服务器返回的session id。
2、本地保存session id,每次对服务器的请求,手动添加。
3、将此session id设置到持有webview的activity中的CookieManager里。
关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
网络处理类 NetHelper /** * 发送登陆请求,并将SESSIONID保存起来 * @param urlPath 登陆请求的地址 * @return 返回的内容 * */ public static String login(String urlPath) { ......省略号...... try { URL url = new URL(urlPath); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置请求方式 conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); // conn.setReadTimeout(5000); int responseCode = conn.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream is = conn.getInputStream(); cookList = conn.getHeaderFields().get("Set-Cookie"); if ((sessionId == null) && (cookList != null)) { for (String value : cookList) { if ((value != null) && (value.toUpperCase().indexOf(";") > 0)) { sessionId = value.split(";")[0]; } } } ......省略号...... } }catch (Exception e){ e.printStackTrace(); } ......省略号...... }/** * 发送一条请求,将内容以字符串返回 * @param urlPath 请求的地址 * @return 返回的内容 * */ public static String request(String urlPath) { ......省略号...... try { URL url = new URL(urlPath); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if(sessionId !=null ){ conn.setRequestProperty("Cookie",sessionId>{ conn.setRequestProperty("Cookie",sessionIdun.com/2016/08/2c7af8842f861006bc4c0ea686577eed.jpg"> ![]()
解决方案: 关键代码:
|