Iframe с проблемой $ _POST (PHP) - PullRequest
       1

Iframe с проблемой $ _POST (PHP)

0 голосов
/ 19 сентября 2011

Несколько месяцев назад я создал quiz -приложение для одного из моих клиентов. Посетители должны ответить на несколько вопросов с «да» или «нет». Первый экран будет содержать первый вопрос, после нажатия кнопки yes или no посетитель будет перенаправлен на вопрос два и так далее. После ответа на все вопросы они получают результат, основанный на ответах, которые они дали.

Приложение интегрировано в веб-сайт клиента с помощью iframe. URL первого вопроса имеет вид http://www.domainname.com/quiz/1/.. При посещении этой страницы PHP сгенерирует идентификатор для идентификации сеанса посетителя. После ответа на вопрос 1 этот идентификатор будет добавлен в URL. URL следующих вопросов похож на http://www.domainname.com/quiz/2/wgbew9rbger9o/.

После ответа на вопрос ответ будет сохранен в базе данных записи, соответствующей идентификатору в URL. Ответ на вопрос представлен $ _POST. Невозможно просмотреть пример вопроса 6, если вы не ответили на предыдущие 5 вопросов, PHP перенаправит посетителя на последний ответ на вопрос.

Приложение работает нормально, однако мой клиент жалуется на нескольких посетителей, которые не могут ответить на первый вопрос. Они могут ответить на вопрос, поэтому их ответ публикуется на сервере, но каким-то образом $ _POST-данные где-то застряли, и PHP думает: «Этот клиент не ответил на вопрос 1, поэтому я должен отправить его на вопрос 1».

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

Есть ли известные проблемы с iframe и отправкой данных или чем-то еще?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2011

Мы постоянно используем iframes, POST и php в нашей компании.Я не знаю конкретной проблемы для этой установки.Я предлагаю вам искать проблемы в других местах, потому что iframes и post довольно простые, стандартные вещи.

Кроме того, php не теряет данные POST и продолжает обрабатывать запрос.Я предполагаю, что на самом деле запрос не может достичь сервера (проблемы с сетевым подключением) или сервер не может обработать запрос (проблемы с настройкой сервера), ответ не сохраняется в базе данных, посетитель получаетскучно и повторяет попытку, делая новый запрос (без ответа), посетитель снова встречает первый вопрос.

Итак, с чего начать?Вот несколько указателей, о которых я могу подумать:

  1. Спросите своего клиента, как часто это происходит, происходит ли это в определенное время (например, в часы пик, например, утром) или с определенными людьми или с определеннымибраузеры или ... вы поняли.
  2. Посмотрите в apache access_log и error_log для HTTP-кодов состояния, отличных от 200, предупреждений php или ошибок.
  3. Посмотрите в error_log mysql на наличие ошибокПредупреждения.
  4. Пока вы это делаете, посмотрите / var / log / messages
  5. Добавьте код отладки на свой сайт, например, когда сайт ловит, что посетитель не ответил на первый вопрос, и перенаправляет егоСначала задайте вопрос, запишите некоторые данные об этом в некоторый текстовый файл на диске или в таблицу в базе данных.

Это должно пролить некоторый свет на природу проблемы, с которой вы столкнулись.

0 голосов
/ 22 сентября 2011

Прежде всего, спасибо за ваши идеи. Мы еще не решили проблему, но у нас есть какая-то новая информация:

Мы не используем php session-id, но сами создаем случайную строку. Длина этой строки 255 символов.

В журналах ошибок apache есть несколько таких уведомлений:

[Чт, 22 сентября 08:58:57 2011] [ошибка] [клиент 212.121.99.2] mod_security: Запрошена фильтрация по полезной нагрузке POST, но полезная нагрузка недоступна [имя хоста "www.webfrog.nl"] [uri "/ application / клиент / 2 / 3BF9g3q9fRmqNkrsRakDimjfB46zrKUa3h0a0g96ZmntwEL5FXzN9ITrDGQW7sW1AM2qT1nydBRA6kwr7X6XlF5O2Lq0532lFTCfLQEO8c64nsca58XhuRXnk4e677itGKz9i5Ng7K1a44b03Z7dwJrHEvErjMLQe2PmXjtJUlKEfMk8r82OIjd3FHlOaXlfO1rr1L2MXt726iQegISOSWIfjTUkw7p2OHkG939Wm6E9ecdlLX1lypqI91SmZ8f / "] [unique_id "TnrcsS4RBNQAADTwB7wAAAAF"]

Возможно ли, что приведенная выше ошибка связана с тем, что некоторые браузеры не могут обрабатывать длину URL-адреса 255+ в iframe?

Редактировать: Журналы показывают, что многие пользователи, имеющие эту проблему, используют комбинацию IE7 + WinXP

Edit2: возможное решение: мы используем <button type="submit" name="answer" value="1">Yes</button><button type="submit" name="answer" value="2">No</button> для отправки данных. Похоже, в IE есть недостаток, который заключается не в разборе данных значения, а в innerHTML. Наш скрипт перенаправления позволяет только значения 1 или 2 быть действительными, в противном случае отправляет его обратно на предыдущую страницу.

0 голосов
/ 19 сентября 2011

Когда вы говорите «PHP сгенерирует идентификатор», вы можете говорить о сеансах PHP и идентификаторе сеанса PHP.

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

Если пользователь теряет сеанс из-за того, что у него не включены куки, он теряет свой прогресс.

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

session.use_cookies = 0

В противном случае убедитесь, что у посетителей включены файлы cookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...