CookieHandler的CookieManager实现和CookieStore的add方法之间似乎有区别.
默认情况下,如果您使用CookieManager中的put,它将添加域和实现内部创建的HttpCookie的路径.如果您直接使用CookieStore的add方法,则不会发生这种情况,因为您负责创建HttpCookie.
事实证明,OkHttp使用来自实现的get,在你的情况下将是CookieManager而不是CookieStore.该get也将使用路径来匹配在您的情况下将丢失的cookie.
如果您未向HttpCookie提供预期的默认路径“/”,则无法找到您的cookie.
然后你应该修改你的HttpCookie
HttpCookie cookie = new HttpCookie("PHPSESSID", getPhpSessionID());
cookie.setPath("/");
cookie.setVersion(0);
cookie.setDomain("www.example.com");
((CookieManager)client.getCookieHandler()).getCookieStore().add(new URI("http://www.example.com"), cookie);
或者为了让您的解决方案更适应您更改CookieHandler实现的机会,您只能使用该界面而不是访问CookieStore
你会这样做的
List values = new ArrayList<>(Arrays.asList("PHPSESSID=" + "your_session_id_here"));
Map> cookies = new HashMap<>();
cookies.put("Set-Cookie", values);
client.getCookieHandler().put(new URI("http://www.example.com"), cookies);