Не удается прочитать файл cookie JSESSIONID после установки для файла cookie значения httpOnly и защиты в web.xml.

Я добавил следующую конфигурацию в свое приложение веб-приложения web.xml

  <session-config>
    <cookie-config>
      <path>/</path>
      <http-only>true</http-only>
      <secure>true</secure>
    </cookie-config>
 </session-config>  

Когда я запускаю свое приложение, я отправляю http-запрос для установки этого файла cookie, и я вижу его в http-ответе с путем /, Secure и httpOnly.

Однако я не вижу, чтобы этот файл cookie отправлялся в следующих http-запросах, и, следовательно, если я делаю request.getSession().getId() для следующих запросов, я получаю пустую строку.

Я попытался добавить следующее в контекст tomcat 8.5, а также в контекст WAR.

<Context sessionCookiePath="/">

но это не решило проблему.

Означает ли это, что файл cookie JSESSIONID не является безопасным и, следовательно, игнорируется для отправки в запросах?


person Ziko    schedule 27.03.2019    source источник
comment
Вы получаете доступ к своему приложению через https?   -  person Selaron    schedule 27.03.2019
comment
Привет, нет, http. localhost, чтобы быть конкретным. Я также отмечаю, что для каждого запроса создается новый сеанс. У меня есть фильтр в промежуточном программном обеспечении, и я вижу, что каждый запрос имеет другой идентификатор сеанса, когда я устанавливаю конфигурацию в web.xml.   -  person Ziko    schedule 27.03.2019


Ответы (1)


Согласно вашему комментарию, вы устанавливаете для атрибута secure файла cookie сеанса значение true, используя соединение http для транспорта.

Хотя используемый протокол http не гарантирует конфиденциальную передачу, вы правильно указываете, что сеанс является конфиденциальной информацией, активируя атрибут secure. Поэтому браузер отказывается отправлять эту информацию обратно на сервер с помощью незащищенного http транспорта с открытым текстом.

Дополнительные сведения см. в этом вопросе и ответе: Как работает флажок "Безопасный" в файле cookie?

Поскольку JSESSIONID никогда не отправляется обратно на сервер, каждый запрос в конечном итоге создает новый сеанс, который никогда не используется для последующих запросов.

Решение состоит в том, чтобы либо отключить атрибут secure, либо предварительно настроить и используйте соединитель https в tomcat.

Вам также следует настроить приложение так, чтобы оно принимало только https подключения и перенаправляло http до https.

person Selaron    schedule 27.03.2019
comment
Это было действительно полезно :) Большое спасибо. - person Ziko; 29.03.2019