один и тот же многократный запрос HttpClient заканчивается разными 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);
    }

я сделал что-то не так?


person bhomass    schedule 14.08.2013    source источник
comment
Возможный дубликат - stackoverflow.com/questions/6272575/   -  person Stewart    schedule 15.08.2013


Ответы (1)


мой глупый эксперимент.

это было потому, что я смешивал использование и передачу HttpClient по разным запросам из одного и того же браузера (например, передавая файлы .js и .css). Эти переданные ресурсы возвращали браузеру другой идентификатор сеанса, и впоследствии браузер начал использовать новый идентификатор сеанса.

person bhomass    schedule 16.08.2013