httpClient保持长会话

在移动开发中登入后常常碰到访问接口被弹回登入,或者提示从新登入问题,其缘由在于访问服务器的会话并不是一个。数据库

解决办法,使用同一个会话浏览器

//connManager, params分别是设置超时和初始化。服务器

 DefaultHttpClient  httpClient = new DefaultHttpClient(connManager, params); cookie

// 将uefEntity参数设置到post请求中post

httpPost.setEntity(uefEntity);ui

// 发送post请求,同时也将entity中的各参数发送过去,得到到响应对象spa

HttpResponse httpResponse = httpClient .execute(httpPost);
.net

若是这里不手动关闭 httpClient 或者不被系统回收,那么你就能够一直使用这个httpClient而不被服务器拦截。firefox

这里和网页访问服务器的原理基本一致,好比用firefox登入后在新打开一个窗口会保持登入状态,而同一台电脑的Goole浏览器打开同一连接倒是未登入状态。这是由于访问服务器的时候,服务器会根据访问会话的cookie来断定你是否能够经过。对象

可是在Android端没法控制系统回收,即便咱们将 httpClient设置为 static类型任然会有数据丢失的时候,这时候咱们就会被逼的去从新登入。解决办法  咱们经过设置httpClient的co'okie来使服务器知道,啊@这家伙跟我有会话连接了,从而放行。

在刚刚 DefaultHttpClient  httpClient = new DefaultHttpClient(connManager, params); 的时候咱们经过httpClient.getCookieStore();是不对的你能够用log打印下结果为空,缘由不用说了吧,这个时候尚未跟服务器创建连接,

当httpClient .execute(httpPost);登入后咱们获取的才是 本次会话的cookie值,

List<Cookie> cookies = httpClient.getCookieStore().getCookies();

 咱们须要将获取的cookies 进行持久化才能保证不会丢失。

将cookies持久化,不会的点进

 是使用SharedPreferences来保存)

http://blog.csdn.net/shimiso/article/details/39033353?utm_source=tuicool

http://blog.csdn.net/junjieking/article/details/7658551 ( 是使用数据库来保存)

当系统或其余异常致使会话中断的时候咱们只需从持久化取出cookie设置到httpClient便可继续访问服务器 httpClient = new DefaultHttpClient(connManager, params); 

   httpClient.setCookieStore(cookieStore);

相关文章
相关标签/搜索