Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Какими методами пользуетесь от защиты повторного сохранения  [new]
Isya
Member

Откуда:
Сообщений: 130
Добрый день!!!
какими методами вы пользуетесь от защиты повторного сохранения данных после SUBMIT, при повторном нажатии кнопки обновить.
29 май 08, 09:28    [5730648]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
vkle
Member

Откуда: Самара
Сообщений: 14264

Как минимум, редирект браузера на другой УРЛ после обработки запроса. Перед
добавлением записей проверка на наличие записи. Так вкратце.

Posted via ActualForum NNTP Server 1.4

29 май 08, 09:52    [5730813]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16189

Аякс

Posted via ActualForum NNTP Server 1.4

29 май 08, 10:28    [5731067]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Anjey aka PM
Member

Откуда: Файне місто Тернопіль
Сообщений: 3230
как вариант ИД формы, который генерится в базе для каждой сгенеренной скриптом формы: сохранил -- вытер ИД или признак "использовано" поставил и усьо

The greatest programming project of all took six days; on the seventh day the programmer rested. We've been trying to debug the *&^%$#@ thing ever since. Moral: design before you implement.
29 май 08, 12:05    [5732058]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
SuSa
Member

Откуда:
Сообщений: 963
сессия.
в отправщике
<?php
session_start();
$_SESSION["myTestVariable"] = "form_ok";
?>
затем форма.
В приемнике
<?php
session_start();
if(isset($_SESSION["myTestVariable"]) && $_SESSION["myTestVariable"] == "form_ok") {
  unset($_SESSION["myTestVariable"]);
и заполнение формы
?>
теперь хоть заобновляйся - проверка не проходит.
29 май 08, 14:22    [5733324]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
anvano
Member

Откуда: Москва
Сообщений: 971
Для небольших баз, где объем таблиц некритичен использую дополнительное поле в таблице. Типа CRC.

При отрисовке формы генерирую hidden поле
<form>
  <input type="hidden" name="crc" value="<?=uniqid("")?>">
</form>

При сабмите формы:
Либо объявляю на это поле уникальный ключ в базе и ловлю исключение при вставке
Либо отдельным селектом перед вставкой проверяю нет ли уже записи с таким CRC в базе.


--------------------------------------------------------------
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
30 май 08, 11:45    [5737887]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16189

>Либо объявляю на это поле уникальный ключ в >базе и ловлю исключение при
>вставке
>Либо отдельным селектом перед вставкой >проверяю нет ли уже записи с таким
>CRC в базе.
афигеть. я знаю способы затормозить сервер и попроще.

Posted via ActualForum NNTP Server 1.4

30 май 08, 11:56    [5738002]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
knuckle
Member

Откуда:
Сообщений: 42
vkle

Как минимум, редирект браузера на другой УРЛ после обработки запроса. Перед
добавлением записей проверка на наличие записи. Так вкратце.


Мне кажется больше и не надо. Так что там больше минимума то? =)
30 май 08, 12:04    [5738082]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16189

запрос долго обрабатывается. Пользователь успевает еще раз нажать "обновить"

Posted via ActualForum NNTP Server 1.4

30 май 08, 12:17    [5738173]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
SuSa
Member

Откуда:
Сообщений: 963
ты про сессию прочитал. Специально для этих граблей написал. может и не лучший вариант. но рабочий.
Хотелось бы красиво.чтоб js дымку вывел со словом "Загрузка ждите", НО ктож знает как это делать?
30 май 08, 12:42    [5738393]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Isya
Member

Откуда:
Сообщений: 130
Смотрел в сторону Аякса, там получается другая проблема:
после нажатия "Сохранить" отправляем запрос, в это время даже пока не пришел ответ пользователь может делать что хочет, то есть возьмет и нажмет какой нить href и уйдет на другую страницу ))).
Хотя идея очень даже неплохая!!! )
30 май 08, 12:44    [5738424]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
SuSa
Member

Откуда:
Сообщений: 963
>>ScareCrow
на фотке кто? ты или твоя девушка?
поменьше небыло? зачем метровую то выкладывать.
Извеняюсь если ошибся в окончании в обращении к тебе.
30 май 08, 12:45    [5738425]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Isya
Member

Откуда:
Сообщений: 130
2SuSa
С сессиями не получиться потому что у меня и отправитель и приемник это 1 файл, так что при каждом обновлении переменная будет регистрироваться.
Мне кажеться идея с генерацией номера формы от Anjey aka PM более подходящая, для данного случая )))
спасибо всем.
30 май 08, 12:49    [5738464]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Anjey aka PM
Member

Откуда: Файне місто Тернопіль
Сообщений: 3230
ScareCrow

запрос долго обрабатывается. Пользователь успевает еще раз нажать "обновить"


помимо защиты от повторного сохранения поглядите ещё в эту сторону
30 май 08, 12:59    [5738547]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16189

>это время даже пока не пришел ответ
крутить крутилку "подождите пожалуйста"

Posted via ActualForum NNTP Server 1.4

30 май 08, 13:12    [5738674]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 16189

>на фотке кто? ты или твоя девушка?
я.
>поменьше небыло? зачем метровую то >выкладывать
ну должны же все прикладывать хоть какие то усилия чтоб меня увидеть. а то
расслабились.

Posted via ActualForum NNTP Server 1.4

30 май 08, 13:14    [5738695]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
vkle
Member

Откуда: Самара
Сообщений: 14264
knuckle
vkle

Как минимум, редирект браузера на другой УРЛ после обработки запроса. Перед
добавлением записей проверка на наличие записи. Так вкратце.


Мне кажется больше и не надо.
Ну как сказать... есть еще в браузере кнопка "Назад", ей тоже можно выйти на отправку данных.
knuckle
Так что там больше минимума то? =)
В скрипте генерации формы устанавливаю в 1 какую нить переменную в сессии, в скрипте приема проверяю, после успешной записи сбрасываю.
30 май 08, 17:16    [5740562]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
BrigadeFuhrer
Member

Откуда:
Сообщений: 73
решений дофига.

самый простой - сессии,- хранить признак постонутой/непостонутой формы + время которое прошло с предыдущего запроса. по времени и по признаку постонутости выводить предупреждение.
31 май 08, 23:18    [5742713]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
apapacy
Member

Откуда:
Сообщений: 1297
О защите от повторных сабмитов а заодно и от использования кнопки back могу порекомнендовать почитать у Герри "Java Server Page" - очень подробно разобрано.
Там примерно так описано генерится уникальный код и отправляется в виде скрытого поля в форму и сохраняется одновременно в сессии. При приеме данных обратно сервером этот код должен совпасть.
Первый раз сабмит обрабатывается правильно и коды совпадают. При повормном сабмите страничка уже устанавливает новый код сессии, а запрос приходит со старым кодом - запрос отменяется.

Можно сделать средствами JavaScript - проще реализовать. Сабмит вызывать функцией form.submit() при обработке INPUT type=button а не INPUT type=submit и сразу делать кнопку недоступной.
1 июн 08, 00:44    [5742808]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
JohnDan
Member

Откуда:
Сообщений: 219
А если жаба скрипт отключен на клиенте?

Я делаю примерно так:
В начале скрипта генерю уникальный идентификатор, засовываю в сессию, например:

...
$_SESSION["uid"] = md5(uniqid(rand(), true));
...
В форме добавляю hidden
...
<input type="hidden" name="uid_post" value="<?=$_SESSION["uid"]?>"
...

После отсылки формы, при сохранении проверяю:

if($_SESSION["uid"] == $_POST["uid_post"])
{
        //сохраняем
        //...
        //генерим новый $_SESSION["uid"]
        $_SESSION["uid"] = md5(uniqid(rand(), true));
}

Если юзверь нажмет F5, $_SESSION["uid"] уже не будет равен $_POST["uid_post"]
$_SESSION["uid"] после сохранения изменился, и не надо тыцкать базу для проверки дублей
2 июн 08, 05:09    [5744912]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
JohnDan
Member

Откуда:
Сообщений: 219
apapacy
О защите от повторных сабмитов а заодно и от использования кнопки back могу порекомнендовать почитать у Герри "Java Server Page" - очень подробно разобрано.
Там примерно так описано генерится уникальный код и отправляется в виде скрытого поля в форму и сохраняется одновременно в сессии. При приеме данных обратно сервером этот код должен совпасть.
Первый раз сабмит обрабатывается правильно и коды совпадают. При повормном сабмите страничка уже устанавливает новый код сессии, а запрос приходит со старым кодом - запрос отменяется.

Можно сделать средствами JavaScript - проще реализовать. Сабмит вызывать функцией form.submit() при обработке INPUT type=button а не INPUT type=submit и сразу делать кнопку недоступной.


Пардон, не увидел пост
2 июн 08, 05:10    [5744913]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1397
apapacy
О защите от повторных сабмитов а заодно и от использования кнопки back могу порекомнендовать почитать у Герри "Java Server Page" - очень подробно разобрано.
Там примерно так описано генерится уникальный код и отправляется в виде скрытого поля в форму и сохраняется одновременно в сессии. При приеме данных обратно сервером этот код должен совпасть.
Первый раз сабмит обрабатывается правильно и коды совпадают. При повормном сабмите страничка уже устанавливает новый код сессии, а запрос приходит со старым кодом - запрос отменяется.

Можно сделать средствами JavaScript - проще реализовать. Сабмит вызывать функцией form.submit() при обработке INPUT type=button а не INPUT type=submit и сразу делать кнопку недоступной.

Тоже читал Гери, понравилось, действительно очень подробно расписано решение на строне сервера. Решение на строне клиента через JS от банального F5, конечно, не спасет, но как дополнение весьма полезно.

vkle
В скрипте генерации формы устанавливаю в 1 какую нить переменную в сессии, в скрипте приема проверяю, после успешной записи сбрасываю.

сбрасывать надо перед обработкой, после сохранения может быть поздно
2 июн 08, 08:08    [5744962]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
vkle
Member

Откуда: Самара
Сообщений: 14264

> сбрасывать надо перед обработкой, после сохранения может быть поздно

Ну, если только с позиции отлова милисекунд, затрачиваемых на обработку, в течении которых пользователь может повторно засабмитить форму. Тады да. Или есть какие то тонктости?

Posted via ActualForum NNTP Server 1.4

2 июн 08, 20:39    [5749420]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1397
vkle

> сбрасывать надо перед обработкой, после сохранения может быть поздно

Ну, если только с позиции отлова милисекунд, затрачиваемых на обработку, в течении которых пользователь может повторно засабмитить форму.

Почти. Никто не гарантирует, что эти милисекунды не затянутся, а вот тут вероятность повторного submit возрастает.

P.S.
Если скрипт запустился, значит данные были отправлены. Мы же от повторной отправки защищаемся, не так ли :-)
3 июн 08, 06:40    [5749961]     Ответить | Цитировать Сообщить модератору
 Re: Какими методами пользуетесь от защиты повторного сохранения  [new]
DocAl
Member

Откуда: Оккупирую западный берег
Сообщений: 10468
Дегтярев Евгений
vkle

> сбрасывать надо перед обработкой, после сохранения может быть поздно

Ну, если только с позиции отлова милисекунд, затрачиваемых на обработку, в течении которых пользователь может повторно засабмитить форму.

Почти. Никто не гарантирует, что эти милисекунды не затянутся, а вот тут вероятность повторного submit возрастает.

P.S.
Если скрипт запустился, значит данные были отправлены. Мы же от повторной отправки защищаемся, не так ли :-)
Разве? Тема про повторное сохранение.
3 июн 08, 22:36    [5755551]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / PHP, Perl, Python Ответить