Asa*_*ssi 9 java cookies android http httpclient
我想在使用HttpGet连接到服务器时保留会话,我需要了解它如何处理cookie.
服务器开发人员说他自己处理所有cookie.我使用HttpGet请求访问服务器如下:InputStream isResponse = null;
HttpGet httpget = new HttpGet(strUrl);
HttpResponse response = mClient.execute(httpget);
HttpEntity entity = response.getEntity();
isResponse = entity.getContent();
responseBody = convertStreamToString(isResponse);
return responseBody;
Run Code Online (Sandbox Code Playgroud)
我应该做点什么吗?他是否自动将cookie放在我的设备上,并且HttpGet方法知道使用它以便使用cookie保持sessionID?
如何检查我的设备上是否存在cookie,以便知道会话是否"活着"?
如果我使用以下代码来获取cookie:
CookieStore cookieStore = new BasicCookieStore();
// Create local HTTP context
HttpContext localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet httpget = new HttpGet(strUrl);
HttpResponse response = mClient.execute(httpget,localContext);
Run Code Online (Sandbox Code Playgroud)HttpGet是否仍像以前一样处理cookie?
所以...经过几个小时的讨论并实现我自己的原始CookieStore后,我发现了Android异步Http客户端实现,其中包括一个很好用的PersistentCookieStore!只需将jar添加到我的项目中并使用如下:
PersistentCookieStore cookieStore = new PersistentCookieStore(context);
DefaultHttpClient mClient = new DefaultHttpClient();
mClient.setCookieStore(cookieStore);
Run Code Online (Sandbox Code Playgroud)
就是这样!当应用程序再次打开时,cookie将被保存并重新使用.
谢谢詹姆斯史密斯,无论你在哪里.你让至少一个男人开心.
如果有人对我自己的原始实现(这也有效)感兴趣,那么:
package com.pinhassi.android.utilslib;
import java.util.Date;
import java.util.List;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class MyPersistentCookieStore extends BasicCookieStore {
private static final String COOKIES_LIST = "CookiesList";
private static final String COOKIES_NAMES = "CookiesNames";
private Context mContext;
/**
*
*/
public MyPersistentCookieStore(Context context) {
super();
mContext = context;
load();
}
@Override
public synchronized void clear(){
super.clear();
save();
}
@Override
public synchronized boolean clearExpired(Date date){
boolean res = super.clearExpired(date);
save();
return res;
}
@Override
public synchronized void addCookie(Cookie cookie){
super.addCookie(cookie);
save();
}
@Override
public synchronized void addCookies(Cookie[] cookie){
super.addCookies(cookie);
save();
}
public synchronized void save()
{
Editor editor = mContext.getSharedPreferences(COOKIES_LIST, Context.MODE_PRIVATE).edit();
editor.clear();
List <Cookie> cookies = this.getCookies();
StringBuilder sb = new StringBuilder();
for (Cookie cookie : cookies)
{
editor.putString(cookie.getName(),cookie.getValue());
sb.append(cookie.getName()+";");
}
editor.putString(COOKIES_NAMES,sb.toString());
editor.commit();
}
public synchronized void load()
{
SharedPreferences prefs = mContext.getSharedPreferences(COOKIES_LIST, Context.MODE_PRIVATE);
String [] cookies = prefs.getString(COOKIES_NAMES,"").split(";");
for (String cookieName : cookies){
String cookieValue = prefs.getString(cookieName, null);
if (cookieValue!=null)
super.addCookie(new BasicClientCookie(cookieName,cookieValue));
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5571 次 |
| 最近记录: |