You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin实现持久化Cookie Jar解决Apollo服务器登录状态丢失问题

解决方案:持久化Cookie避免重启后重新登录

当前MyCookieJar仅将Cookie存储在内存中,应用重启后内存数据被清空,导致每次都需要重新登录。要解决这个问题,核心是把Cookie持久化到本地存储,下面以Android平台的SharedPreferences为例给出具体实现:

1. 实现持久化CookieJar

private class PersistentCookieJar(private val sharedPrefs: SharedPreferences) : CookieJar {

    private var cookies: List<Cookie> = loadSavedCookies()

    // 从本地加载已保存的Cookie
    private fun loadSavedCookies(): List<Cookie> {
        val cookiesString = sharedPrefs.getString("saved_cookies", null) ?: return emptyList()
        return Gson().fromJson(cookiesString, object : TypeToken<List<Cookie>>() {}.type)
    }

    // 将Cookie保存到本地
    private fun saveCookiesToPrefs(cookies: List<Cookie>) {
        val cookiesString = Gson().toJson(cookies)
        sharedPrefs.edit().putString("saved_cookies", cookiesString).apply()
    }

    override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
        this.cookies = cookies
        saveCookiesToPrefs(cookies)
    }

    override fun loadForRequest(url: HttpUrl): List<Cookie> {
        // 过滤掉已过期的Cookie,避免无效请求
        val validCookies = cookies.filter { !it.expiresAt.isPast }
        // 如果有Cookie过期,更新本地存储的有效Cookie
        if (validCookies.size != cookies.size) {
            this.cookies = validCookies
            saveCookiesToPrefs(validCookies)
        }
        return validCookies
    }
}

2. 初始化ApolloClient时传入持久化CookieJar

在创建ApolloClient的代码中,传入应用的SharedPreferences实例:

val sharedPrefs = context.getSharedPreferences("apollo_cookies", Context.MODE_PRIVATE)
val cookieJar = PersistentCookieJar(sharedPrefs)

val apolloClient = ApolloClient.builder()
    .serverUrl("你的Apollo服务器地址")
    .cookieJar(cookieJar)
    .build()

额外注意事项

  • 若使用Gson序列化Cookie,需在项目的build.gradle中添加依赖:
    implementation 'com.google.code.gson:gson:2.10.1'
    
  • 部分Cookie可能带有HttpOnly属性,这类Cookie无法被客户端代码读取和存储,需要服务器端调整Cookie属性,确保登录态Cookie支持客户端持久化。
  • 代码中已自动过滤过期Cookie,避免存储无效数据,减少不必要的请求错误。

内容的提问来源于stack exchange,提问作者Sherm13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:53:23