Xpoint
   [напомнить пароль]

Отправка формы с одного IP не более 2 раз в сутки

Метки: [без меток]
2012-01-19 17:16:46 [обр] Blademen[досье]

Встал вопрос о отправке формы с одного ip, не более 2 раз в сутки.

Данный вариан работает только для 1 раза в сутки, то есть форму можно отправлять только 1 раз в сутки.
Подскажите пожалуйста, что необходимо сделать чтобы с одного ip форма отправлялась, не более 2 раз в сутки.

$f = @fopen('tmpcache/ipadres_' . $_SERVER['REMOTE_ADDR'], 'w');
@fputs($f, time());
@fclose($f);
@chmod('tmpcache/ipadres_' . $_SERVER['REMOTE_ADDR'], 0777);

if(@file_exists('tmpcache/ipadres_' . $_SERVER['REMOTE_ADDR']) && @filemtime('tmpcache/ipadres_' . $_SERVER['REMOTE_ADDR']) > (time() - 86400))
{
  die('текст.');
}

Спасибо!

спустя 1 час 29 минут [обр] Филипп Ткачев(20/112)[досье]
86400 / 2 = ?
спустя 14 часов [обр] Lynn «Кофеман»(98/571)[досье]
Ну так пишите в файл сколько раз отправлена форма
спустя 2 дня 4 часа [обр] Филипп Ткачев(20/112)[досье]
В вашем скрипте есть один баг: если адрес будет из пространства IPv6, то у вас возможны проблемы, т.к. не все файловые системы поддерживают символ двоеточия для имени файла.
спустя 21 час [обр] Blademen[досье]

Спасибо за ответы!

В вашем скрипте есть один баг: если адрес будет из пространства IPv6, то у вас возможны проблемы, т.к. не все файловые системы поддерживают символ двоеточия для имени файла.

Как можно решить проблему с багом?

спустя 3 часа 18 минут [обр] Дмитрий Попов(171/509)[досье]

Самое простое и сходу - везде в коде замените $_SERVER['REMOTE_ADDR'] на md5($_SERVER['REMOTE_ADDR']), например.

Но тут есть еще одна бага - если потенциально людей будет много - папка tmpcache станет нечитаемой, начнет тормозить, а в какой-то момент переполнит возможное максимальное число файлов.

Вариантов решения миллион и все они очевидны - начиная от того, что бы подключить все-таки к работе базу, через решение с хранением всех записи в файле и просто искать по нему, заканчивая более сложной структурой файловой системы.

спустя 5 часов [обр] Филипп Ткачев(20/112)[досье]
В данном случае идеальное решение, это любая СУБД. Даже NoSQL-хранилище подойдет.
спустя 4 дня [обр] Blademen[досье]
Спасибо!
Powered by POEM™ Engine Copyright © 2002-2005