我希望用户通过HttpGet/HttpPost操作执行不同的任务。我想保存 Cookie,以便用户只需要在 Cookie 过期后登录。
在浏览互联网时,我发现"PersistentCookiestore"是一个很好的起点。
问题1:如何在HttpClient软件中使用(apache)PersistentCookieStore?我没有看到完整的示例,例如如何在第一次使用httpclient时开始使用PersistentCookieStore。
例如,请参阅:
static PersistentCookieStore cookie_jar = new PersistentCookieStore( getApplicationContext());
public void login() {
// how to connect the persistent cookie store to the HttpClient?
....
client2 = new DefaultHttpClient( httpParameters);
…
client2.setCookieStore(cookie_jar);
....
HttpGet method2 = new HttpGet(uri2);
....
try {
res = client2.execute(method2);
}
catch ( ClientProtocolException e1) { e1.printStackTrace(); return false; }
....
问题 2:如何在调用后更新 Cookie,还是永远不需要?换句话说:当我在调用 HttpGet 或调用 client2.execute( ...) 后必须更新 HttpPost 时。
在使用httpclient的(非持久性)cookie的示例代码中,我看到了:
cookie_jar = client.getCookieStore();
….
HttpGet or HttpPost …
client.setCookieStore( ....)
client.execute( .. ) // second call
谢谢你的帮助。
问题 1:我将 AsyncHttpClient 与 PersistenCookieStore 一起使用
问题 2:我仅在用户登录应用程序时更新我的 Cookie
AsyncHttpClient client = new AsyncHttpClient();
PersistentCookieStore myCookie = new PersistentCookieStore(CONTEXT);
//Clean cookies when LOGIN
if(IS_LOGIN)
myCookie.clear();
client.setCookieStore(myCookie);
现在我想知道如何知道cookie何时过期
最初的问题是:如何防止每次应用程序启动后登录?答案当然是使用饼干。那么,如何存储 Cookie 以便在应用程序重启后重复使用呢?
对我有用的答案非常简单:只需将 cookiestore 转换为字符串,在退出应用程序之前将其放入共享首选项中。在下一个应用程序启动后,因此在下次登录之前,只需从共享首选项中获得刺痛,将其转换回cookiestore。使用 cookiestore 会阻止我再次登录。
public void saveCookieStore( CookieStore cookieStore) {
StringBuilder cookies = new StringBuilder();
for (final Cookie cookie : cookieStore.getCookies()) {
cookies.append(cookie.getName());
cookies.append('=');
cookies.append(cookie.getValue());
cookies.append('=');
cookies.append(cookie.getDomain());
cookies.append(';');
}
SharedPreferences.Editor edit = sharedPref.edit();
edit.putString( MY_GC_COOKIESTORE, cookies.toString());
edit.commit();
}
// retrieve the saved cookiestore from the shared pref
public CookieStore restoreCookieStore() {
String savedCookieString = sharedPref.getString( MY_GC_COOKIESTORE, null);
if( savedCookieString == null || savedCookieString.isEmpty()) {
return null;
}
CookieStore cookieStore = new BasicCookieStore();
for ( String cookie : StringUtils.split( savedCookieString, ';')) {
String[] split = StringUtils.split( cookie, "=", 3);
if( split.length == 3) {
BasicClientCookie newCookie = new BasicClientCookie( split[0], split[1]);
newCookie.setDomain( split[2]);
cookieStore.addCookie( newCookie);
}
}
return cookieStore;
}