OkHttp 新会话

问题描述 投票:0回答:1

我有一个 http 服务器,它使用会话,但每次我从 okhttp 发送请求时,服务器都会创建一个新会话。

服务器使用jetty和sparkjava。在浏览器中它可以正常工作,并且控制台也确认了这一点。使用 okhttp 它无法正常工作,控制台证实了我对会话的怀疑。 我该如何解决这个问题?

我无法编写一个最小的可重现示例,因为我的项目并不小(<2500 lines) and I think it isn't useful.

如何让 okhttp 通过仅一个会话发送请求?

java session jetty okhttp spark-java
1个回答
0
投票

管理请求和响应cookie不是OkHttp客户端的工作。它无法知道 cookie 策略以及哪些请求属于某个“会话”。但是,它提供了与客户端相关的

CookieJar
接口,可用于根据请求 URL 保存和加载
Cookie
实例。

像这样:

    var acceptingCookieJar = new CookieJar() {
        ConcurrentHashMap<URI, List<Cookie>> cookieMap = new ConcurrentHashMap<>();

        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            return cookieMap.computeIfAbsent(url.uri(), k -> Collections.emptyList());
        }

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


    var client = new OkHttpClient.Builder()
            .cookieJar(acceptingCookieJar)
            .build();

请注意,这只是一个示例。根据您的用例,仅存储请求 URL 的主机部分可能就足够了,或者可能需要跟踪多个会话 ID,例如 JSESSIONID。

© www.soinside.com 2019 - 2024. All rights reserved.