将会话 ID 从 Android 应用程序发送到 Jersey Web 服务

Sending the session id from an Android App to a Jersey web service

我得到了一个 Android 应用程序,它应该与使用 JerseyJetty.

实现的 Web 服务进行通信

我可以使用此代码读取传入的会话 ID:

private static void getCookie(HttpResponse httpResponse)
{
    Header[] headers = httpResponse.getAllHeaders();
    for (int i=0; i < headers.length; i++)
    {
        Header h = headers[i];
        String s1 = h.getName();
        if(s1.equals("Set-Cookie"))
        {
            sessionCookieValue = h.getValue().split(";",2)[0];
            return;
        }
    }
}

这似乎有效,我在 cookie 值中得到了这样的值:JSESSIONID=8pdfuwgduykls5cvj971ylrc

问题是我好像没有正确发送。 Web 服务注入了一个 HttpServletRequest 参数,该参数应该保存会话 ID,但实际上没有。

我尝试通过的方式是这样的:

DefaultHttpClient  client = new DefaultHttpClient();
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", sessionCookieValue);
cookie.setPath("/");
cookie.setDomain(MyApplication.WEB_SERVICE_BASE_ADDRESS); //"192.168.200.158/"
cookieStore.addCookie(cookie);
client.setCookieStore(cookieStore);
HttpResponse httpResponse;
try
{
    httpResponse = client.execute(request);
        ...
}

为什么会话 ID 没有注入到 Web 服务中的请求中?

终于找到问题了

最初的评论是正确的 - BasicClientCookie 中的 cookie 键应该是 "JESSIONID"。路径和域应该像我在那里那样设置。

主要问题只是从 `sessionCookieValue 中删除 "JSESSIONID=" 前缀。我删除它后,一切正常。