Файл cookie не читается

#java #jsf #cookies #jsf-2 #missing-cookies

#java #jsf #файлы cookie #jsf-2 #отсутствуют файлы cookie

Вопрос:

Я реализовал функцию «Запомнить меня» в своем веб-приложении. Я сделал это, используя cookie, который содержит имя пользователя / пароль, зашифрованные с помощью RSA.

Я добавляю cookie при входе в систему; если затем я выхожу из системы (не закрывая браузер), cookie считывается нормально, и на странице входа я вижу уже введенное имя пользователя / пароль. Но если я закрою браузер; или закрою вкладку и снова запущу приложение, когда файлы cookie будут прочитаны, единственным файлом cookie, который будет прочитан, будет JSESSIONID. cookie с учетными данными отсутствует в массиве, возвращаемом ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies(­); , хотя я могу видеть его в браузере. почему это?

Это код, который создает файл cookie:

 String credentials = username   "?"   password;
Cookie c = CookieHandler.getInstance().createCookie("vtcred", credentials, rememberMe);
FacesContext facesContext = FacesContext.getCurrentInstance();
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(c);
  

и метод createCookie:

 public Cookie createCookie(String name, String value, boolean rememberMe) {
        value = encript(value);
        Cookie credCookie = new Cookie(name, value);
        credCookie.setHttpOnly(true);
        if(rememberMe) {
            credCookie.setMaxAge(86400);
        }
        else {
            credCookie.setMaxAge(0);
        }
        return credCookie;
    }
  

Редактировать: я устанавливаю максимальный возраст cookie на один день; и в браузере я вижу, что срок действия cookie истекает завтра, так что это не проблема

Заранее спасибо, Дэмиан

правка2: это очень странно, но, похоже, сейчас это работает. Я продолжу тестировать его и уведомлю. Спасибо.

Комментарии:

1. Сохранение имени пользователя и пароля в cookie, зашифрованном или нет, звучит не очень хорошей идеей

2. Можете ли вы опубликовать код, в котором вы устанавливаете cookie?

3. код добавлен @Kal @Matti Virkkunen, я знаю, что это не очень хорошая идея, но в моем случае это единственный выбор, который у меня есть, потому что веб-приложение, которое я разрабатываю, — это просто веб-интерфейс для существующей системы. Я использую вызовы веб-службы на сервере приложений (который содержит базу данных и большую часть логики)

Ответ №1:

Я обнаружил, почему иногда cookie не читается. Это связано с атрибутом path.

Если у кого-то возникла эта проблема, задайте путь к файлу cookie следующим образом:

 Cookie c = new Cookie("name", "value");
cookie.setMaxAge(86400);
cookie.setPath("/");
  

С уважением

Ответ №2:

Возможно, вы захотите установить для cookie дату истечения срока действия. Если вы этого не сделаете, это будет длиться только до сеанса браузера.

Комментарии:

1. Извините, я забыл это сказать. Я устанавливаю максимальное значение на один день с помощью следующего кода: credCookie.setMaxAge(86400); и это работает, потому что, когда я вижу cookie в браузере, в поле «Expires» я вижу завтрашнюю дату.