gpt4 book ai didi

android - 如何使用 okhttp3 和 PersistentCookieStore 访问 cookie 并检查它是否已过期?

转载 作者:行者123 更新时间:2023-11-29 02:35:45 25 4
gpt4 key购买 nike

我正在开发一个 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?非常感谢您提供任何建议。

最佳答案

好吧,这是旧的,但我遇到了同样的问题,这是我解决它的方法。

保留对用于实例化 CookieJarSetCookieCache 的引用:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com