Принятый ответ на этот вопрос неправильный, это легко сделать.
Хитрость заключается в том, чтобы сделать это:
// 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);
Вот и все! Не требуется манифест локального кэша, и вы можете работать с сеансами в веб-приложении так же, как с веб-страницами в обычном настольном или мобильном браузере. Я тестировал на iPhone 5 (iOS 6.1) и iPhone Simulator / iPad 2 (оба iOS 6.0), и это работало даже при выключении и перезапуске устройства / симулятора во время сеанса.
Это прекрасно работает: полученный cookie-файл сеанса распределяется между несколькими экземплярами веб-приложения, если пользователь несколько раз добавляет ваше веб-приложение на домашний экран, и, если режим приватного просмотра Safari не включен, cookie-файл сеанса даже будет доступно при просмотре веб-страницы непосредственно из Safari вместо использования веб-приложения. Поэтому независимо от того, как пользователь подходит к вашему приложению, текущая сессия всегда восстанавливается при использовании этой стратегии.
Чтобы попробовать сами, используйте приведенный выше код и выведите session_id()
на своей веб-странице ( временно, так как это представляет угрозу безопасности ) и посмотрите, меняется ли оно между закрытием и открытием веб-приложения из дома. экран (попробуйте перезагрузить устройство во время сеанса). Если выводимый идентификатор сеанса не изменяется, он работает: он, очевидно, сохраняется в некотором (общем) локальном кэше Safari.
Протестировано и подтверждено для работы под iOS 4.2.1, 5.1.1, 6.0 и 6.1.
Отказ от ответственности: В документации Apple явно указывается необходимость в манифесте локального кэша для локального сохранения данных в веб-приложении, но это решение работает без этого. То есть это решение может опираться на недокументированное или некорректное поведение Mobile Safari. Однако, поскольку он работает на очень многих версиях iOS, у меня сложилось впечатление, что это намеренное поведение (по крайней мере, со стороны Apple), просто нечетко задокументированное.