Я рекомендую установить для closeIdleSessions значение true и короткий интервал сердечных сокращений, что должно заставить механизм очистки внутренних сеансов Vaadin быстрее уничтожать сеансы после закрытия веб-браузера.
Если это не помогает, существуеттакже вспомогательное дополнение https://vaadin.com/directory/component/cleanupservlet-add-on
Копирование из https://vaadin.com/docs/v8/framework/application/application-lifecycle.html
Срок действия сеанса
Сеанс поддерживается активным по запросам сервера, вызванным пользователемвзаимодействие с приложением, а также мониторинг пульса UI.После истечения срока действия всех пользовательских интерфейсов сеанс все еще остается.Он очищается от сервера, когда истекает время ожидания сеанса, настроенное в веб-приложении.
Если в приложении имеются активные пользовательские интерфейсы, их пульс поддерживает сеанс на неопределенный срок.Вы можете захотеть установить тайм-аут сеансов, если пользователь достаточно долго неактивен, что является первоначальной целью настройки тайм-аута сеанса.Если для параметра closeIdleSessions сервлета задано значение true в файле web.xml, как описано в разделе «Использование дескриптора развертывания web.xml», сеанс и все его пользовательские интерфейсы закрываются по истечении времени ожидания, заданного параметром session-timeoutсрок действия сервлета истекает после последнего запроса без пульса.После завершения сеанса браузер отобразит ошибку Out Of Sync при следующем запросе к серверу.Чтобы избежать появления уродливого сообщения, вы можете установить URL-адрес перенаправления для пользовательских интерфейсов, как описано в разделе «Настройка системных сообщений».
Соответствующие параметры конфигурации описаны в разделе «Другие параметры конфигурации сервлета».
Вы можете обработать истечение срока сеанса на стороне сервера с помощью SessionDestroyListener, как описано в разделе «Сеанс пользователя».