相同的HttpClient多个请求以不同的HttpSession结束

时间:2013-08-14 22:07:07

标签: httpclient httprequest httpsession

我正在使用新的Apache HttpClient 4.2(不是Apache Commons的那个)。

我需要打开一个HttpClient并向同一台服务器发出多个请求。从文档中,httpClient应该自动维护cookie,因此多个请求属于同一个会话。但是,在服务器端,我正在调试直到看到

HttpSession session = req.getHttpSession(true);

每次都返回一个新的HttpSession对象。

我的客户端代码是这样的。

//第一次

HttpClient httpClient = new DefaultHttpClient();
            req.getSession(true).setAttribute(HTTPCLIENT, httpClient);

            HttpGet httpget = new HttpGet(redirectUrl);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String content = httpClient.execute(httpget, responseHandler);

// subsequent calls
HttpClient httpClient = getHttpClient(req);

            HttpGet httpget = new HttpGet(redirectUrl);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String content = httpClient.execute(httpget, responseHandler);


// supported by the private method

private HttpClient getHttpClient(HttpServletRequest req){
        return (HttpClient) req.getSession(true).getAttribute(HTTPCLIENT);
    }

我做错了吗?

1 个答案:

答案 0 :(得分:0)

我的愚蠢实验。

这是因为我正在混淆使用并通过HttpClient传递来自同一浏览器的不同请求(例如,通过传递.js和.css文件)。这些通过传递的资源将不同的sessionId返回给浏览器,随后,浏览器开始使用新的sessionId。