1

我正在使用 Okhttp3 来发出 http get/post 请求。

PersistentCookiejar即使应用程序关闭,我也会使用持久化 cookie,然后再重新启动。

但是,当我进行 HTTP 调用时,OkHTTpClient 不会将 cookie 从 android 设备发送到 Web 服务器。不知道如何解决它,如果 http 客户端没有在每个 http 请求上发送 cookie,我认为持久 cookie 没有任何意义。

这是我用来初始化 http 客户端以及我如何发出 http 请求的代码。

    cookieJar =
            new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));
    client = new OkHttpClient.Builder()
            .cookieJar(cookieJar)
            .build();


 client.newCall(request).enqueue(new Callback() {
    /** cookies are not sent to server.
      **/
4

1 回答 1

1

经过一段时间的调试,我弄清楚了发生了什么。

我的服务器发回的 Cookie(会话 cookie)没有 expires 属性。并且PersistentCookieJar不会保留没有expires属性的 cookie。结果,这些 cookie 只是保存在内存中的 cookie 缓存,不跨活动共享(至少我的代码没有共享 cookie 缓存。我只是共享持久存储)。

更改我的服务器端代码以发送带有过期时间戳的 cookie 解决了这个问题。

于 2016-03-03T18:30:17.437 回答