Обработка файлов cookie с помощью сервлета - PullRequest
1 голос
/ 07 сентября 2011

У меня проблема с правильной настройкой данных cookie-файла (постоянный / межсервисный сеанс) внутри сервлета и чтения его в фильтре.

код сервлета (работает в журналепо времени):

    String encodedValue = new String(Base64
        .encodeBase64(req.getParameter("account").getBytes()));
    Cookie cookie = new Cookie("projectAuthenticationCookie", encodedValue );
    cookie.setMaxAge(24*60*60);
    cookie.setPath("/");
    res.addCookie(cookie);

Это позволит получить cookie в ответе, но когда я прочитал его в своем фильтре со следующим кодом:

    Cookie authenticationCookie = null;
    Cookie[] cookies = ((HttpServletRequest) request).getCookies();
    for (Cookie cookie : cookies){
        if ("projectAuthenticationCookie".equals(cookie.getName())) {
            authenticationCookie = cookie;
        }
    }

Я получу толькоЗначение, которое я установил правильно, все остальные поля либо нулевые, либо пустые, либо разные.Например, максимальный возраст всегда возвращает -1, и, следовательно, файл cookie не будет сохраняться.

cookie return values

Я попытался установить заголовок expires с помощью:

    res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);

какЯ прочитал, что без действительного заголовка expires сеанс все равно прекратится (исправьте меня, если я ошибаюсь), но это тоже не помогло ...

Одна проблема, о которой я думаю, это то, что я бегуна локальном хосте (попытался установить cookie.setDomain ("localhost"), но тоже не повезло).Мой контейнер веб-сервера / serclet - Jetty 7, но я не думаю, что это актуально ...

Есть какие-нибудь подсказки?

1 Ответ

6 голосов
/ 07 сентября 2011

Поля, кроме имени и значения, не заполняются (и, следовательно, не имеют смысла) в файлах cookie, которые вы получаете из запроса.

Эти поля предназначены для информирования браузера о максимальном возрасте; путь и т. д. файла cookie, но браузер не отправляет эту информацию обратно на сервер. Единственный раз, когда важно иметь правильный максимальный возраст, путь и т. Д., Это когда вы создаете куки и добавляете его в ответ. Используйте свой браузер, чтобы проверить, хранит ли он правильную информацию, вместо того, чтобы пытаться найти ее на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...