我正在开发一个 Android 应用程序,其中向网络服务发出登录后请求。该请求返回一个 20 分钟后过期的 cookie。
使用 okhttp3 和这个 PersistentCookieStore库,我得到了要存储的 cookie,随后将其添加为请求 header 以访问需要身份验证的获取请求(例如,非公开的个人信息)。
代码是这样的,
CookieJar myCookieJar = new PersistentCookieJar(new SetCookieCache(),
new SharedPrefsCookiePersistor(this));
OkHttpClient client = new OkHttpClient.Builder().cookieJar(HttpRequests.cookieJar).build();
然后我在异步任务中调用类似这样的方法(在我完成另一个登录异步任务以获取 cookie 之后)异步任务来执行需要身份验证的获取请求,
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 添加到 header 以告知网络服务我已通过身份验证。
我的难处来了。由于 cookie 在 20 分钟后过期,我希望能够访问 cookie 本身以检查过期时间,并可能通过调用方法将用户重定向到登录 Activity ,
myCookie.expiresAt()
并将其与
进行比较System.currentTimeMillis()
我试图查看 PersistentCookieStore 代码,发现它使用带有键“CookiePersistence”的 SharedPreference。当我的模拟器运行应用程序时,我查看了这个文件,发现它是空的。
我怎样才能访问我获得的这个 cookie?非常感谢您提供任何建议。
最佳答案
好吧,这是旧的,但我遇到了同样的问题,这是我解决它的方法。
保留对用于实例化 CookieJar
的 SetCookieCache
的引用:
SetCookieCache cookieCache = new SetCookieCache();
CookieJar myCookieJar = new PersistentCookieJar(
cookieCache,
new SharedPrefsCookiePersistor(this)
);
然后使用它来查找您的 cookie 并检查它:
for (Cookie cookie : cookieCache) {
if (cookie.name().equals("cookie_name") && cookie.persistent()) {
//cookie is still good
break;
}
}
或者使用 cookie.expiresAt()
来做你的事。
关于android - 如何使用 okhttp3 和 PersistentCookieStore 访问 cookie 并检查它是否已过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47197335/