Я собираюсь немного подробнее рассказать об ответе Уолдо Бэггинса.
Когда я столкнулся с этим, я обнаружил, что причина этого заключается в том, что для файлов cookie сеанса, установленных на сервере, обычно не задано значение срока действия. Поведение по умолчанию в этом случае заключается в том, что браузер отбрасывает куки-файл, когда браузер закрывается / повторно открывается. Поскольку браузер не пересылает cookie при повторном открытии, сервер не может идентифицировать сеанс, даже если он еще не истек на сервере, и, таким образом, ваш пользователь перенаправляется обратно на страницу входа.
Когда пользователь использует ваш сайт в режиме веб-приложения (значок добавлен на главный экран), iOS обрабатывает переход к приложению и из него так же, как настольный компьютер будет относиться к закрытию и повторному открытию браузера, и теряет сеанс при повторном открытии. .
Таким образом, следуя предложению Уилбо и установив время истечения для файла cookie, iOS проверяет, истек ли срок действия файла cookie, когда пользователь переходит обратно к вашему приложению, и, если это не так, повторно отправляет файл cookie, тем самым поддерживая сеанс. Значение 1 года в ответе Уилбо является смехотворно длинным, обычно вы хотите установить его равным 8 или 24 часам и в идеале синхронизировать его со значением времени ожидания истечения сеанса, которое вы установили на сервере.
Обратите внимание, что в качестве побочного эффекта, когда к вашему сайту обращаются из браузера на рабочем столе, а пользователь закрывает и снова открывает браузер, сеанс будет продолжать сохраняться, и пользователь все равно будет входить в систему, что не будет были случаи ранее (если они не просматривали в частном порядке). Ваша функция выхода из системы должна правильно обрабатывать истекающий срок действия этого файла cookie.
Для веб-приложения Java, использующего web.xml версии 3.0 или выше, самый простой способ сделать это - изменить <session-config>
следующим образом:
<session-config>
<session-timeout>600</session-timeout> <!-- In minutes -->
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
<max-age>36000</max-age> <!-- In seconds -->
</cookie-config>
</session-config>