我正在开发一个Android应用程序,其中向Web服务发出登录请求。请求返回一个cookie,该cookie在20分钟后到期。
使用okhttp3和这个PersistentCookieStore库,我得到了要存储的cookie,然后将其添加为请求标头,以访问需要身份验证的请求(例如,非公开的个人信息)。
代码就是这样,
CookieJar myCookieJar = new PersistentCookieJar(new SetCookieCache(),
new SharedPrefsCookiePersistor(this));
OkHttpClient client = new OkHttpClient.Builder().cookieJar(HttpRequests.cookieJar).build();
然后我调用这样的方法(在我通过Async任务中的另一个日志获取cookie之后)执行需要身份验证的get请求的异步任务,
public static String PostReq(String url, String json) {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.addHeader("Cookie", "key=value")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
catch(Exception e){
}
}
.addHeader(" Cookie"," key = value")将Cookie添加到标头中,以告知网络服务我已通过身份验证。
这就是我的困难。由于cookie在20分钟后过期,我希望能够访问cookie本身来检查过期时间,并可能通过调用方法将用户重定向到登录活动,
myCookie.expiresAt()
并将其与
进行比较System.currentTimeMillis()
我试着查看PersistentCookieStore代码,发现它使用了一个带有密钥" CookiePersistence"的SharedPreference。当我的模拟器运行应用程序时,我查看了这个文件,然后发现它是空的。
我如何能够访问我获得的这个cookie?非常感谢任何建议。
答案 0 :(得分:0)
好的,这很旧,但是我面临着同样的问题,这就是我如何解决它。
保留对用于实例化SetCookieCache
的{{1}}的引用:
CookieJar
然后使用它来查找您的cookie并进行检查:
SetCookieCache cookieCache = new SetCookieCache();
CookieJar myCookieJar = new PersistentCookieJar(
cookieCache,
new SharedPrefsCookiePersistor(this)
);
或者使用 for (Cookie cookie : cookieCache) {
if (cookie.name().equals("cookie_name") && cookie.persistent()) {
//cookie is still good
break;
}
}
做你的事情。