[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать задержку между запросами?
Maktraher
У меня есть форма отправки писем, которая к тому же через ajax работает.
Требуется ограничить количество посылаемых писем на еденицу времени. То есть, например, пользователь отправил письмо, и следующее письмо он сможет отправить только через 2 минуты.
Если я правильно понимаю это надо как то через сессии организовывать? Я вот пока чего-то не представляю как это сделать, подскажите!



Спустя 8 минут, 12 секунд (22.03.2011 - 17:03) panacea написал(а):
Почему бы не прятать ссылку как в файлообменниках с таймаутом?

Спустя 9 минут, 36 секунд (22.03.2011 - 17:13) Maktraher написал(а):
Идея хорошая, но мне не подходит.

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

Спустя 3 минуты, 14 секунд (22.03.2011 - 17:16) Maktraher написал(а):
И форма у меня после отправки не сбрасывается, т.е. все введенное так и остается после отправки, и на кнопку можно хоть миллион раз тыркать, что не есть хорошо. А если еще учесть, что у меня отправка вызывается функцией яваскрипта, то можно скрипт написать который будет автоматически посылать эти письма миллионами, вот этого я и хочу избежать.

Спустя 13 минут, 32 секунды (22.03.2011 - 17:30) Invis1ble написал(а):
Сохраняй время последней отсылки письма к примеру в БД, и проверяй при запуске скрипта - если текущее время >= время последней отсылки + таймаут - то тогда можно отсылать.

Спустя 9 минут, 37 секунд (22.03.2011 - 17:39) Maktraher написал(а):
ну это я понял, а как пользователя идентифицировать?

Спустя 9 минут, 45 секунд (22.03.2011 - 17:49) Invis1ble написал(а):
не знаю, если он у тебя неавторизован - то наверно писать ему куки какие-нибудь или по ip, но это достаточно сложный вопрос и однозначного ответа ты на него врядли где-то услышишь, то же самое относится к проблеме системы бана, имхо

Спустя 7 минут, 17 секунд (22.03.2011 - 17:56) Maktraher написал(а):
IP динамический может быть, придется через кукисы наверное...

Спустя 3 минуты, 26 секунд (22.03.2011 - 18:00) Snus написал(а):
Maktraher
Пиши в БД письма и запускай крон каждые 2 минуты и выдирай письма за последние 2 минуты smile.gif

Спустя 57 секунд (22.03.2011 - 18:01) Invis1ble написал(а):
А куки отключены могут быть, а также их можно с легкостью отредактировать wink.gif
Я например с одного файлообменника качал помню что-то, потом с него же мне надо было скачать еще какой-то файл - а он мне пишет, мол, подождите 47 минут, т.к. недавно вы уже скачивали. Я бутаю модем, убиваю куки - и вуаля ) качаю еще. Тоже самое и тут.
Поэтому я и говорю, что это довольно проблематичный вопрос

Спустя 7 минут, 34 секунды (22.03.2011 - 18:08) Maktraher написал(а):
Snus
А как это поможет то? За те 2 минуты можно миллион писем напосылать, и крон благополучно их схавает.

Спустя 1 минута, 37 секунд (22.03.2011 - 18:10) Maktraher написал(а):
Блин, как то не круто, придется капчу тогда делать...

Спустя 4 минуты, 58 секунд (22.03.2011 - 18:15) Snus написал(а):
Maktraher
Тогда тупо отправлять по одному письму

Спустя 1 минута, 27 секунд (22.03.2011 - 18:16) Snus написал(а):
Maktraher
Авторизованные пользователи могут отправлять письма?

Спустя 22 секунды (22.03.2011 - 18:17) Maktraher написал(а):
Snus
Ну а если другой юзер пошлет в этот промежуток письмо?

Спустя 1 минута, 38 секунд (22.03.2011 - 18:18) Maktraher написал(а):
Snus
Авторизации нету, отправлять могут все.

Спустя 5 минут, 12 секунд (22.03.2011 - 18:23) Snus написал(а):
Maktraher
Если у тебя авторизованные юзвери, то делай примерно так.
Создавай таблицу в БД email_cron
id | userId | email | title | text | datetime

Пользователь жмет отправить письмо и мы заносим в таблицу запись
1 | 786 | vasya@pupkin.com | Превед медвед | ПРЕВЕД! | 2011-03-22 18:23:00

Далее тягаем кроном список на отправку
SELECT *
FROM `email_cron`
WHERE ... (тут проверка например по времени)
GROUP BY `userId`
ORDER BY `id`

Отсылаем письма товарищам и удаляем запись по ID
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.