现在单机版本的App已经不多了,基本上都会和服务器进行通信。Android提供Http访问的方式有两种,一种是HttpClient,一种是UrlConnection.这里要说的是HttpClient。
在Http访问中,我们可能会遇到一些这样的场景,比如服务端要求几次Http请求组成一次完整的客户端服务器通信,比如同步。现在的App很多有有账号系统,会提供把用户数据备份的功能,那么这么在线备份功能就是这样的一个场景,它包括登陆、数据上传,结果返回、提交确认或者终止等这样的顺序步骤,每一步都是一次Http访问请求。服务器的设计(负载均衡等)需要要求客户端在这依次完整的数据备份的几次Http访问请求中保持同一个Session.便于服务器的协调和操作,就和用户用浏览器打开网页去完整一件事情一样,这就需要我们在每次Http请求的时候保持Session。
其实保持HttpClient的请求Session,就是保证在每次Http请求访问的请求头信息的Cookie参数中,携带同一个JSESSIONID,只要保证每次是一样的,服务器就认为是同一Session,这就保持了Seesion会话。那么这个JSESSIONID是怎么来的呢,是服务器通过响应头信息给的,服务器在给客户端设置Cookie时,会通过响应头信息中的Set-Cookie参数传递回来,只要有新设置的Cookie,就是通过这个传递过来,如果没有则是null,那么我们就可以在请求完之后返回的信息里读取这个Set-Cookie头信息,然后保存起来,在下次请求的时候给服务器发送过去,就实现了保持Seesion的目的。代码如下:
//定义储存Cookie信息 private String cookies; public void executeGet(String url) throws ClientProtocolException, IOException{ HttpClient httpClient=new DefaultHttpClient(); HttpGet httpGet=new HttpGet(url); setRequestCookies(httpGet); HttpResponse response=httpClient.execute(httpGet); appendCookies(response); } /** * 设置请求的Cookie头信息 * @param reqMsg */ private void setRequestCookies(HttpMessage reqMsg) { if(!TextUtils.isEmpty(cookies)){ reqMsg.setHeader("Cookie", cookies); } } /** * 把新的Cookie头信息附加到旧的Cookie后面 * 用于下次Http请求发送 * @param resMsg */ private void appendCookies(HttpMessage resMsg) { Header setCookieHeader=resMsg.getFirstHeader("Set-Cookie"); if (setCookieHeader != null && TextUtils.isEmpty(setCookieHeader.getValue())) { String setCookie=setCookieHeader.getValue(); if(TextUtils.isEmpty(cookies)){ cookies=setCookie; }else{ cookies=cookies+"; "+setCookie; } } }
上面的代码就是一个简单的例子,我们在发送我们的请求之前,把现存的Cookie通过请求头信息发送给服务器,然后再服务器返回的头信息中解析,看是否有需要的更新的Cookie即可,这样我们就达到了保持Seession目的。
当我们需要重新设置Seesion的时候,请求我们保存的cookie即可,这样代码就会重新获取。如果都有个账号并发备份,那么一个账号分配一个cookie变量存储即可,也就是把上面的代码放到一个如HttpManager管理的类里,每个账号的备份都可以new个HttpManager实例,这样每个账号都可以单独处理自己的Cookie,互不干扰。
相关推荐
httpClient请求和服务器session保持同步,webView对cookie的管理
最近做android模拟登陆,登陆成功后才有权限进行...于是就找了几种保持登录session 访问网页的方法,分享一下,不喜勿喷! 一、利用安卓自带的httpclient。 详细说明:http://android.662p.com/thread-5637-1-1.html
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient。 尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。 OkHttp是一个相对成熟的解决...
纯JSP演示Cookie自动登录(完整工程。主要实现勾选自动登录后, 哪怕服务器重启后session丢失,靠客户端COOKIE仍然正常登录并刷新COOKIE。...现为WEB,可改造为提供android 和ios下的httpclient保持长久登录状态的方式。
一、概述 最近在群里听到各种讨论okhttp的话题,可见okhttp的口碑相当好了。... 支持session的保持 最后会对上述几个功能进行封装,完整的封装类的地址见:http://xiazai.jb51.net/201611/yuanma/okht
10. Base64图片处理,支持PC,Android,IOS 11. Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并用到了项目中) 12. 提供大量工具类,可以直接使用 13. Maven项目构建,您可以直接做架构,可以...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...
同时保持蒸提供全面的支持,无缝集成的IDE(语法着色,代码导航,重构等)的语法和操作代码完全分离。最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是...