една и съща HttpClient множествена заявка завършва с различна HttpSession

Използвам новия Apache HttpClient 4.2 (не този от Apache Commons).

Трябва да отворя един HttpClient и да направя множество заявки към един и същ сървър. От документацията httpClient трябва автоматично да поддържа бисквитката и следователно множеството заявки да попадат в една и съща сесия. От страната на сървъра обаче отстранявам грешки и виждам това

HttpSession session = req.getHttpSession(true);

връща нов HttpSession обект всеки път.

моят клиентски код е такъв.

// 1-ви път

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 файлове). Тези предадени ресурси върнаха различен sessionId на браузъра и впоследствие браузърът започна да използва новия sessionId.

person bhomass    schedule 16.08.2013