Android 使用OkHttpClient发送Cookie

Android 使用OkHttpClient发送Cookie,android,cookies,okhttp,okhttp3,Android,Cookies,Okhttp,Okhttp3,我正在使用Okhttp3来发出http get/post请求 cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this)); client = new OkHttpClient.Builder() .cookieJar(cookieJar) .build(); client.

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

    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.
      **/
我正在使用
PersistentCookiejar
来持久化cookies,即使在应用程序关闭之后再次启动时也是如此

然而,当我进行HTTP调用时,OkHTTpClient并没有将cookies从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.
      **/

经过一段时间的调试,我明白了发生了什么

我的服务器返回的Cookie(会话Cookie)没有expires属性。而
PersistentCookieJar
在没有
expires
属性的情况下不会持久化cookie。因此,这些cookie只保存在cookie缓存中,该缓存位于内存中,不在活动之间共享(至少我的代码没有共享cookie缓存。我只共享持久存储)


将我的服务器端代码更改为发送带有过期时间戳的Cookie解决了此问题。

您能确认Cookie正在被持久化吗?我应该做些什么来保存Cookie。它们不是在收到响应后自动存储的吗。当调用new CallBack().onResponse()时?我应该使用CookieManager确保响应后保存cookie吗?