iPhone «Закладка на Homescreen» удаляет cookies и сеанс?

Сейчас я разрабатываю веб-приложение, в котором пользователь должен сначала войти в систему.

Когда я открываю страницу с помощью iPhone Safari, заходим в систему и перезапускаем Safari, я все еще вхожу в систему (уже установлен файл cookie и Session ID).

Но когда я добавляю эту страницу с «Добавить на главный экран», каждый раз я нажимаю значок для этой страницы, мне нужно снова войти в систему.

Я не нашел никакой информации об этом. Что я могу сделать, чтобы мои пользователи могли установить эту страницу на свой домашний экран в качестве значка и все равно не нужно входить в систему при каждом открытии?

    Очень простой подход может заключаться в использовании уникального токена в URL-адресе вашей закладки, который может служить вам уникальным идентификатором устройства.

    Пример: http://myWebApp.com/?token=randomId29238/1

    Маркер может быть создан на стороне сервера во время открытия приложения в Mobile Safari и до того, как пользователю будет предложено ввести информацию «Добавить на главный экран». Затем токен может быть добавлен в URL с помощью быстрого перенаправления (… & token = randomToken) или хеша местоположения (… # randomToken).

    Всякий раз, когда закладка теперь открывается с главного экрана, маркер отправляется на ваш сервер, и вы можете определить активный сеанс пользователя. Вы также можете использовать токен как постоянный идентификатор сеанса, но я рекомендую это из соображений безопасности.

    Чтобы разрешить будущие процедуры выхода из системы и входа в систему, вы всегда можете назначить новые сеансы токену.

    Токен будет служить вам как уникальный идентификатор устройства, когда пользователь снова откроет вашу ссылку с его главного экрана.

    Существует более легкое и более элегантное решение, чем favo.

    По крайней мере, в iOS 4.2.1, 5.1.1, 6.0 и 6.1 (я не смог протестировать другие версии), если вы продлеваете время жизни своего cookie сеанса вручную, Safari будет храниться в cookie сеанса и даже разрешить совместное использование сеанс между версией «домашнего экрана» вашего веб-приложения и обычными посещениями через safari.

    Хитрость заключается в том, чтобы сделать это:

    // Start or resume session session_start(); // Extend cookie life time by an amount of your liking $cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds setcookie(session_name(),session_id(),time()+$cookieLifetime); 

    Для более подробного обсуждения этой страtagsи вы можете взглянуть на мой ответ на этот вопрос:

    Поддерживать сеанс PHP в веб-приложении на iPhone

    Для веб-приложений доступно постоянное хранилище ключей и хранилище баз данных. Вы можете сохранить свои данные аутентификации с помощью объекта localStorage и использовать XMLHttpRequest для отправки на сервер. Другим вариантом является сохранение ваших постоянных данных в базе данных SQLite, однако это не похоже на правильное решение в вашем случае. Ознакомьтесь с руководством по программированию на стороне клиента и автономным приложениям Apple для деталей / примеров.

    Я собираюсь еще немного расширить ответ Вальдо Бэггинса.

    Когда я столкнулся с этим, я обнаружил, что причина этого заключается в том, что cookie сеансов, установленный на сервере, обычно не имеет установленного значения срока действия. Поведение по умолчанию в этом случае заключается в том, что браузер отбрасывает файл cookie, когда браузер закрыт / повторно открыт. Поскольку браузер не отправляет cookie при повторном открытии, сервер не может идентифицировать сеанс, даже если он еще не истек на сервере, и, таким образом, ваш пользователь перенаправляется обратно на страницу входа.

    Когда пользователь использует ваш сайт в режиме веб-приложения (значок добавлен на главный экран), iOS рассматривает навигацию в / из приложения так же, как настольный компьютер будет рассматривать закрытие и повторное открытие браузера и теряет сеанс при повторном открытии.

    Поэтому, следуя предложению Wilbo и установив время истечения срока действия cookie, iOS проверяет, истек ли файл cookie, когда пользователь переходит к вашему приложению, а если он этого не сделал, повторно отправляет файл cookie, тем самым сохраняя сеанс. Значение 1 года в ответе Уилбо смешно длиннее, вы обычно хотели бы установить это примерно на 8 или 24 часа, и в идеале синхронизировать его со значением тайм-аута истечения сеанса, установленным на сервере.

    Обратите внимание, что в качестве побочного эффекта, когда ваш сайт доступен из браузера рабочего стола, и пользователь закрывает и повторно открывает браузер, сеанс будет продолжать сохраняться, и пользователь все равно будет зарегистрирован, что не было бы ранее (если только они не просматривались в частном порядке). Функция «Выход из системы» должна была бы корректно обрабатывать истечение срока действия этого файла cookie.

    Для Java webapp, использующего web.xml версии 3.0 или выше, самый простой способ сделать это – изменить следующим образом:

      600   true true 36000    
    Давайте будем гением компьютера.