Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избежать повторного POST-запроса? Грамотно избежать. 
:(
    Опции темы
Drkwv
Дата 20.8.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Сабж. Пробовал ставить редирект при помощи headers 301 303 и т.п., в ie все работало на ура, однако... браузер для мобильного телефона нокИя smile совершенно справедливо отказался забыть содержимое POST запроса при редиректе и при нажатии кнопки обновить стабильно высылает его скрипту. Ввиду того что ожидать от разработчиков ПО разумных действий при разработке веб-браузеров невозможно в принципе, все данные методы по отсылке заголовков являются недействительными и рано или поздно дадут сбой. Плюс, существует еще такая кнопка как "Назад".

Отсюда вопрос - как грамотно организовать блокировку повторных POST запросов на логическом уровне? Наверняка с этой проблемой кто-либо сталкивался и не раз...

Проблема в том, что запросы, одинаковые по содержанию, в принципе, могут и не являться "повторными". А регистрация времени отправки запроса и последующее сравнение будет давать сбои при большом количестве пользователей. Спасибо.

Это сообщение отредактировал(а) Drkwv - 20.8.2006, 18:02
PM MAIL   Вверх
alergi
Дата 20.8.2006, 19:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.8.2006
Где: МОСКВА

Репутация: нет
Всего: нет



phpclub.ru/faq/ProblemsLocations
PM MAIL WWW ICQ   Вверх
Drkwv
Дата 20.8.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Цитата(alergi @ 20.8.2006,  19:07)
phpclub.ru/faq/ProblemsLocations

Ха! не все браузеры одинаково полезны. На предложение пойти в Location: телефонный браузер перенаправляет POST - запрос в этот самый Location. Я же говорю - они все ненормальные, эти разработчики.. там такая муть творится....

Добавлено @ 19:32 
А можно еще два раза по кнопке сабмита стукнуть и тогда Location не поможет (и скрипты еще отключить, чтобы disabled не сработал)  smile 
PM MAIL   Вверх
alergi
Дата 20.8.2006, 22:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.8.2006
Где: МОСКВА

Репутация: нет
Всего: нет



Drkwv, и что? Пускай отправляет свой запрос на скрипт, на который он переправлен. Главное что он еще отправляет POST запрос на скрипт прописанный в action.

Главная цель избежать случайной повторной отправки, header-location прекрасно с этим справляется.
А если пользователь задасться целью специально повторно отправить данные, то ты его никак не остановишь smile
PM MAIL WWW ICQ   Вверх
Darhazer
Дата 21.8.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 7
Всего: 29



А мы делаем так
Запрос перенаправляем на dispatcher.php, dispatcher.php записиваеть $_POST в $_SESSION['post'] и перенаправливаеть скрипт куда эму надо. И там уже нету POST-запроса, так что далнейшая работа вполне безопасная


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 21.8.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Всегда помогал header( "Location: ..." ); exit;...
Или я  не совсем верно задау понял.

PM ICQ   Вверх
Alone
Дата 21.8.2006, 14:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Цитата

Или я  не совсем верно задау понял.


Mal Hack, ага. Человек же как раз об этом и говорит, что браузер плевал на хедер локейшн и вместе с редиректом отдает пост-данные...

Интересный случай... Ща подумаем... smile


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 21.8.2006, 14:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Что за браузер у нокиа? Ссылку на сайт дайте.
PM ICQ   Вверх
Alone
Дата 21.8.2006, 14:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Э... ну эт смотря какая нокия...
В последних моделях они заюзали вебкит smile если это ни о чем не говорит, то я скажу:
вебкит - "яблочный"(apple)  движок для браузеров сафари. Основан на KHTML из KDE(популярный *nix WinManager) + свои патчи...


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
Drkwv
Дата 21.8.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 21.8.2006,  14:23)
Что за браузер у нокиа? Ссылку на сайт дайте.

[HTTP_USER_AGENT] => Nokia6030/2.0 (y3.44) Profile/MIDP-2.0 Configuration/CLDC-1.1   На сайте нокиа об этом ничего не упоминается, видимо им стыдно smile

Подумал что надо хешировать мессагу или ее часть, сливая хеш с timestamp'ом подло записанным в hidden input и когда-нибудь, когда полтора миллиарда китайцев одновременно зайдет на сайт и че-нить односложное напишет, процентов 70 из них отфильтруется. Поэтому надо еще проверять ip и не дай бог они станут заходить через proxy %) задача решения не имеет до тех пор пока невозможно абсолютно точно идентифицировать пользователя 

Впрочем, можно для проверки использовать session_id и записывать туда содержимое POST с timestamp и тогда все будет совсем зашибись, правда мне запускать сессию для всех подряд зашедших пользователей не нравится и поисковики беситься будут, но это мелочи а cookies можно отключить поэтому их использовать нельзя. решение задачи жутко некрасивое ))

Это сообщение отредактировал(а) Drkwv - 21.8.2006, 22:03
PM MAIL   Вверх
alergi
Дата 22.8.2006, 08:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.8.2006
Где: МОСКВА

Репутация: нет
Всего: нет



Drkwv, опиши подробнее, что делает эта Нокиа.
PM MAIL WWW ICQ   Вверх
Drkwv
Дата 22.8.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Цитата(alergi @ 22.8.2006,  08:58)
Drkwv, опиши подробнее, что делает эта Нокиа.

при перенаправлении - неважно с каким заголовком, переносит содержимое POST запроса на перенаправляемый скрипт. При нажатии кнопки "назад" делает то же самое.
PM MAIL   Вверх
alergi
Дата 23.8.2006, 09:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 14.8.2006
Где: МОСКВА

Репутация: нет
Всего: нет



т.е. у нас есть страница с формой form.php, из формы данные отсылаются на action.php, и затем происходит перенаправление на redirect.php
А нокия отправляет данные на action.php, а потом ещё на redirect.php. Я правильно понял?
PM MAIL WWW ICQ   Вверх
Alone
Дата 29.8.2006, 17:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: 1
Всего: 6



Предлагаю решение:

Шаг 1 :
В сессию пишем переменную-хеш от таймстампа+session_id (тут как фантазия подскажет)
и её же дописываем в форму, в хайден поле. выводим форму.

Шаг 2 :
Нам пришел POST? проверяем его хайден с нашей переменной из сессии, если совпало, выполняем че надо и сносим в сесси переменную




--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5052 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.