qq_43544413 2019-07-15 11:55 采纳率: 0%
浏览 116

关于Cookies的问题有大神来看看吗?

public class HttpUtil {

private static OkHttpClient singleton;

//非常有必要,要不此类还是可以被new,但是无法避免反射
private HttpUtil() {

}

public static OkHttpClient getInstance() {
    if (singleton == null) {
        synchronized (HttpUtil.class) {
            if (singleton == null) {

                singleton = new OkHttpClient.Builder()
                        .connectTimeout(10, TimeUnit.SECONDS)
                        .readTimeout(20, TimeUnit.SECONDS)
                        .cookieJar(new CookieJar() {
                            private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();

                            @Override
                            public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                                cookieStore.put(url.host(), cookies);
                            }

                            @Override
                            public List<Cookie> loadForRequest(HttpUrl url) {
                                List<Cookie> cookies = cookieStore.get(url.host());
                                return cookies != null ? cookies : new ArrayList<Cookie>();
                            }
                        }).build();
            }
        }
    }
    return singleton;
}

}
这样写如果切换用户登录会造成cookies丢失 吗

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-10 19:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中,CookieJar 是一个抽象类,它提供了保存和加载 cookie 的接口。当您使用 getInstance() 方法创建 OkHttpClient 实例时,实际上是在创建一个新的实例,并且这个新实例会覆盖之前的 CookieJar 实例。

    因此,在同一个 Activity 或者应用内切换用户登录不会导致 cookies 丢失,因为它们是保存在一个单独的实例中,而不是在共享的全局存储(如 SharedPreferences)中。每个 OkHttpClient 实例都有自己的 cookie 存储,所以即使在不同用户间切换也不会影响到其他用户的 cookies。

    然而,需要注意的是,CookieJar 类并不提供持久化功能,也就是说,一旦 cookie 被删除或过期,那么这些 cookie 将从本地缓存中移除,而不会被永久保留。因此,为了确保 cookie 不会被误删或者过期,建议定期检查并清理 CookieJar 中的 cookie,或者使用更高级的数据存储方案来实现 cookie 的持久化存储。

    评论

报告相同问题?