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

时间:2017-11-09 08:40:26

标签: android cookies okhttp3

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

1 个答案:

答案 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; } } 做你的事情。