Сеанс PHP теряется на смартфонах при возврате в браузер

0

У меня есть процесс проверки, который имеет следующие этапы:

  1. Результаты цен
  2. Информация о клиенте
  3. Оплата
  4. Подтверждение заказа

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

Проблема:

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

Кажется, что если вы оставите вкладку открытой, а затем перейдите в другое приложение или загрузите множество других веб-страниц, то при попытке вернуться к предыдущей вкладке устройство будет либо:

  • загрузите страницу в состояние, в котором вы ее оставили, ИЛИ
  • перезагрузит URL-адрес вкладки, как если бы он стал новым ударом по странице.

И есть проблема. Если кто-то находится на моей странице клиента или платежной странице, и URL-адрес получает новый эффект, сеанс, похоже, не существует, и мой код считает, что кто-то попадает на страницу в первый раз, что бросает приветственное сообщение об ошибке моим клиентам говоря, чтобы перезапустить их цитату.

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

Должен ли я использовать сеансы, файлы cookie и базу данных - или комбинацию?

  • 0
    Вы регистрируете или обрабатываете что-нибудь, связанное с IP-адресом клиента при обработке сеанса? Если это так, то это может быть проблемой, поскольку клиент может находиться в роуминге между мобильными данными и беспроводной связью. Или же сессия может просто закончиться, если у них открыто много страниц, и они возвращаются на вашу страницу намного позже. У вас есть два решения: ваш сеанс истекает намного позже или вы можете использовать куки, чтобы браузер мог сохранить свой статус, а не полагаться на сервер ...
  • 0
    Увеличьте время ожидания сеанса. Это единственный путь. Или заставьте их закрыть свои открытые приложения на заднем плане. Который не способ сделать это. Но вы ничего не можете сделать с обновлением: только пользователь.
Показать ещё 2 комментария
Теги:
cookies
session
session-variables
session-cookies

1 ответ

1
Лучший ответ

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

Поэтому вместо сеанса URL-адреса вы получаете сеанс cookie.

просто используйте session_start() в верхней части каждого из ваших php файлов или если у вас есть основной объект, который всегда загружается первым (например, index.php), поместите туда session_start().

Для получения дополнительной информации о механизме читайте http://www.onlamp.com/pub/a/php/excerpt/webdbapps_8/?page=2

  • 0
    Я собираюсь прочесть об этом сегодня днем и перезвоню здесь с любыми вопросами, если это нормально. Спасибо, что поделился.
  • 0
    Привет майкл Таким образом, после прочтения проблема с планшетами и телефонами заключается в «отбрасывании вкладок» - ОС удалит кэш вкладок и просто сохранит URL-адрес, готовый перезагрузить всю веб-страницу, когда вы захотите ее снова. Теперь это, кажется, убивает мою сессию, как и ожидалось. Но если я сохранил session_id () с самого начала в файле cookie - могу ли я прочитать это значение при загрузке страницы и начать использовать этот сеанс, чтобы клиент продолжал, как если бы сеанс никогда не заканчивался? Я прочитал эту ссылку выше, но пока не ясно, решит ли это мою проблему. Надеюсь, вы можете помочь! Заранее спасибо.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню