Подтвердить что ты не робот

IPhone "Закладка на Homescreen" удаляет файлы cookie и сеанс?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Есть более легкое и более элегантное решение, чем favo.

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

Хитрость заключается в следующем:

// 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);

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

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

Ответ 3

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

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

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

Итак, следуя предложению Wilbo и установив время истечения срока действия 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>

Ответ 4

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

Ответ 5

Я получил хорошие результаты, используя iframe и отправляю, получаю данные с сообщениями, сохраняя данные в cookie файлах адреса iframe

Ответ 6

Я получил хорошие результаты, используя iframe и отправляю, получаю данные с сообщениями, сохраняя данные в cookie файлах адреса iframe

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