我试图在我的Android应用中维护用户会话。我的登录工作方式如下:我向API发出请求并发送用户电子邮件和密码,如果用户确实存在,那么我将获得一个JSONObject并使用GSON进行管理。这很好用。我还将Cookie 纳入 CoookieStore 并将其保存到 SharedPreferences
中事情是,每次应用程序暂停时,我显然都丢失了Cookie,我无法向API提出任何其他请求,因为当然,我没有获得授权。
有什么办法可以在onResume()方法中从SharedPreferences恢复Cookie吗?
我试过了,就像这样:
InteractionManager 是我管理与发出请求和从API获取响应有关的所有内容的类
所以在我的活动中我这样做了:
@Override
protected void onResume() {
Log.d(TAG, "onResume");
super.onResume();
//Create a new instance of cookieStore to set it
//into the InteractionManager CookieStore when
//the app gets resumed.
CookieStore cookieStore = new BasicCookieStore();
String name = "user_credentials";
String value = prefs.getString(name, "");
Cookie cookie = new BasicClientCookie(name, value);
cookieStore.addCookie(cookie);
name = "user_class";
value = prefs.getString(name, "");
Log.d(TAG, "user_class cookie: " + value);
cookie = new BasicClientCookie(name, value);
interactionManager.setCookieStore(cookieStore);
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
interactionManager.setLocalContext(localContext);
}
但显然我做得不对,因为API一直说我没有被授权,这可能是因为我做错了管理cookie。
我做错了什么?
希望有人可以提前帮助,谢谢。
答案 0 :(得分:1)
或者你可以使用android-async-http这是一个非常强大的灵活的http客户端用于android。
根据其文档,您可以轻松地在Android应用程序中使用cookie:
首先,创建一个AsyncHttpClient实例:
AsyncHttpClient myClient = new AsyncHttpClient();
现在将此客户端的cookie存储设置为PersistentCookieStore的新实例,使用活动或应用程序上下文构建(通常这样就足够了):
PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
myClient.setCookieStore(myCookieStore);
从服务器收到的任何cookie现在都将存储在持久性cookie存储区中。
要将自己的cookie添加到商店,只需构建一个新的cookie并调用addCookie:
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);
祝你好运。