【问题标题】:same HttpClient multiple request ends up with different HttpSession相同的 HttpClient 多个请求以不同的 HttpSession 结束
【发布时间】:2013-08-17 01:52:56
【问题描述】:

我正在使用新的 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);
    }

我是不是做错了什么?

【问题讨论】:

标签: httpclient httprequest httpsession


【解决方案1】:

我的愚蠢实验。

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

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多