Поддержка PHP-сессии в веб-приложении на iPhone - PullRequest
7 голосов
/ 03 апреля 2012

У меня есть мобильное веб-приложение jquery. На моем iPhone, когда я нахожусь в веб-приложении, у меня есть логин и переменные сеанса. Если я покину приложение, чтобы перейти в другое место на телефоне, а затем вернусь в веб-приложение, мне придется снова войти в систему. Кажется, сеанс не поддерживается. Далее, если у меня есть внешняя ссылка, и она открывает сафари для этой ссылки, тот же сеанс не переносится в окно сафари. Есть ли способ сохранить сеанс?

Ответы [ 4 ]

18 голосов
/ 30 января 2013

Принятый ответ на этот вопрос неправильный, это легко сделать.

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

// 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), просто нечетко задокументированное.

2 голосов
/ 03 апреля 2012

Я предполагаю, что вы имеете в виду мета-тег Apple "полноэкранные", веб-приложения.Они существуют в песочнице, поэтому нет, данные сеанса не будут поддерживаться.

1 голос
/ 22 августа 2017

Если вы не хотите открывать сафари при нажатии на ссылку, просто используйте этот git.

https://gist.github.com/kylebarrow/1042026

В основном просто скопируйте файл stay_standalone.js в свой проект и вваши взгляды включают эту строку:

<script src="stay_standalone.js" type="text/javascript"></script>
0 голосов
/ 03 апреля 2012

Если вы не можете использовать Cookies, вы должны создать сеанс на стороне сервера, но это будет продолжаться до тех пор, пока пользователь не использует тот же IP-адрес или время, когда ваш сервер настроен для сеансов, это означает, что пользователь переключается 3g для WiFi приложение обнаружит, что это другой IP-адрес, поэтому сессия будет закрыта.

...