![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Archon7th |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 22.4.2005 Где: Витебск Белорусия Репутация: нет Всего: нет |
Как отсечь многократное выполнение скрипта если пользователь допустим на форме перехода зажмет доупора Enter
и получится что серия пары SELECT-UPDATE запросов вместо SELECT1-UPDATE1 SELECT2-UPDATE2 SELECT3-UPDATE3 наложится как SELECT1 SELECT2 SELECT3 UPDATE1 UPDATE2 UPDATE3 как от этого защититься или как ограничить число переходов страниц от юзера скажем до 1 клика в секунду я пробовал вводить Замки через создание переменных и флагов на юзерах пробовал лочить таблицу, ничего не помагает, сервак очень быстрый 4х ядерный и получается что все запросы всёровно обрабатываются отдновременно, а небольшая задержка базы в несколько мсек оказывается более чем достаточной уже подумываю добавлять в некоторые места Delay но всёровно думаю не поможет --------------------
CPU not found. Running software emulation. |
|||
|
||||
destrd |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 1.10.2008 Репутация: 3 Всего: 4 |
А что происходит то? Тут и без зажатого Enter такое может быть, пользователи могут одновременно зайти на страницу.
--------------------
Some people, when confronted with a problem, think, "I known, I'll use regular expressions." Now they have two problems. -- Jamie Zawinski in comp.lang.emacs |
|||
|
||||
Archon7th |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 22.4.2005 Где: Витебск Белорусия Репутация: нет Всего: нет |
если пользователи разные, то ничего страшного не произойдет, а вот если пользователь один, то получается наложение, т.к. в UPDATE используется одно и то же поле базы
именно что нужно отсеять повторное обращение одного и того же юзера в идеале конечно же было бы иметь отсечение вне зависимоти от времени но и подошла бы защита запрета второго перехода в одну отдельно взятую секунду Это сообщение отредактировал(а) Archon7th - 9.10.2008, 15:42 --------------------
CPU not found. Running software emulation. |
|||
|
||||
SamDark |
|
|||
![]() Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
-------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
georgiy11 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 29.9.2008 Репутация: нет Всего: нет |
Я конечно не профи в этом, но а если сценарий запускать через функцию "засыпания" sleep() или usleep(), перед соединением с БД.
|
|||
|
||||
Deepthroat |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 24.9.2007 Где: Outer Heaven Репутация: 1 Всего: 2 |
А если на стороне клиента запретить отправку данных более одного раза - просто блокировать поля ввода после однократной отправки.
|
|||
|
||||
bobik02 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 451 Регистрация: 26.11.2007 Репутация: 2 Всего: 14 |
легко обойти -------------------- Have a nice day |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Archon7th, А транзакции помогают? Ну, на худой конец - таблицы залочить
Добавлено через 1 минуту и 10 секунд
Как это - не помогает ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Archon7th |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 22.4.2005 Где: Витебск Белорусия Репутация: нет Всего: нет |
там проблема тогда в том же:
грубо проблему с локом можно описать так: LOCKED - проверка замка LOCK - установка замка SELECT UPDATE UNLOCK порядок иногда будет выглядить так проблема решается лишь частично, т.е. иногда срабатывает иногда нет, причем чаще всего нет LOCKED1=false LOCKED2=false LOCK1 LOCK2 (в этом месте база почемуто еще не залочена первым замком но второй замок иногда не ставится вовсе, хотя LOCKED возвращает всёровно false как для 1 так и для 2 ) SELECT1 SELECT2 UPDATE1 UPDATE2 UNLOCK1 UNLOCK2 пробовал и менять порядок с LOCKED и LOCK - не получается тоже т.е. с паралельными запросами кализий нет и не возникает, а вот с таким задалбливанием всёровно работает код немогу привести, т.к. проблема не в одном файлике, а в целой цепочке модулей --------------------
CPU not found. Running software emulation. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Речь идет про mysql?
Вот цитата из документации
В каком месте и зачем вызывается LOCKED? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
В форму добавляете хидден с уникальным идентификатором поля. Этот же идентификатор записываете пользователю в сессию. По приходу формы на сервер проверяем существует ли в сессии такой идентефикатор. Если да -- ансетим его и начинаем обработку. Если нет -- редирект(ну или просто сообщение о ошибке)
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |