Проверка IP

Статус
В этой теме нельзя размещать новые ответы.

rasandrey

Участник
Регистрация
2 Апр 2009
Сообщения
214
Реакции
6
Подскажите, плиз, как сделать:

у меня есть форма обратной связи. Нужно проверять перед каждой отправкой IP адрес, если форма с этого ИП была отправлена менее чем 7 дней назад, то выводить сообщение "Вы уже оставили отзыв" если более 7 дней назад - то выполнить action?

Как?
 
Если проверка по ip, то нужно сохранять где-нибудь даты отправки формы для всех ip за последние 7 дней, например в базе. И уже там проверять. Можно сохранять cookies в браузере на 7 дней и проверять, если установлена cookie, то значит за последние 7 дней форма была отправлена. Но во втором случае посетителю будет достаточно сменить браузер или удалить нужные cookie, зато это можно будет сделать полностью на JS.
 
Если проверка по ip, то нужно сохранять где-нибудь даты отправки формы для всех ip за последние 7 дней, например в базе. И уже там проверять. Можно сохранять cookies в браузере на 7 дней и проверять, если установлена cookie, то значит за последние 7 дней форма была отправлена. Но во втором случае посетителю будет достаточно сменить браузер или удалить нужные cookie, зато это можно будет сделать полностью на JS.

я думаю, что записывать в файл было бы оно... Но не знаю как делать проверку на ИП?
 
я думаю, что записывать в файл было бы оно... Но не знаю как делать проверку на ИП?

В большинстве случаев для того, чтобы узнать ip-адрес можно использовать переменную окружения REMOTE_ADDR:
PHP:
$ip = $_SERVER['REMOTE_ADDR'];
Но можно еще проверять такие переменные, как
HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP
 
Вот сделал так... осталось 2 проблемы: считать с файла IP - проверить на совпадение(как сделать не знаю), считать дату и сравнить с настоящей!
PHP:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$file = fopen("ip.txt", "a+") or die ("Невозожно открыть файл");
while(!feof($file))
{

$s = fgets($file,10);
if ($ip == $s)
{
echo "Вы уже оставляли отзыв";
break;
}
else {
$date = date("d m Y");
fputs($file,$ip."\n");
fputs($file,$date);
echo "Можете оставить отзыв";
	}
}

fclose($file);
?>
 
Вот сделал так... осталось 2 проблемы: считать с файла IP - проверить на совпадение(как сделать не знаю), считать дату и сравнить с настоящей!

если делать таким способом, то, наверное, лучше сохранять в каждой строке дату и ip, т.е. запись в файл будет выглядеть так:
PHP:
fputs($file, $ip . ' ' . date(Y-m-d) . "\n");

Для проверки ip нужно пройтись по всем строкам файла и разделить по пробелу ip и дату. Если найден ip, то проверяем дату. Преобразовать строку в дату можно при помощи ф-ии strtotime(). С помощью нее можно также к дате прибавить 7 дней (+ 7 days). И после этих двух операций с датой сравниваем полученную дату с текущей.
Если планируется много отправок формы, то имеет смысл время от времени удалять старые данные по ip.
 
Я бы советовал вместо сохранения IP-адреса, устанавливать куку на неделю.
Т.к. при проверке IP могут быть случаи когда один пользователь отправил форму, а все остальные пользователи из этой сетки вынуждены ждать 7 дней.
 
Вот функция определения IP.
PHP:
function getIP() { 
  if (isSet($_SERVER)) { 
    if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) { 
      $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    } elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) { 
      $realip = $_SERVER["HTTP_CLIENT_IP"]; 
    } else { 
      $realip = $_SERVER["REMOTE_ADDR"]; 
    } 
  } else { 
    if ( getenv( "HTTP_X_FORWARDED_FOR" ) ) { 
      $realip = getenv( "HTTP_X_FORWARDED_FOR" ); 
    } elseif ( getenv( "HTTP_CLIENT_IP" ) ) { 
      $realip = getenv( "HTTP_CLIENT_IP" ); 
    } else { 
      $realip = getenv( "REMOTE_ADDR" ); 
    } 
  } 
  return $realip; 
}
 
Я бы советовал вместо сохранения IP-адреса, устанавливать куку на неделю.
Т.к. при проверке IP могут быть случаи когда один пользователь отправил форму, а все остальные пользователи из этой сетки вынуждены ждать 7 дней.
Сейчас каждый 2 умеет удалять куки....
Так что это бессмысленная идея...

Я бы сделал регу на сайте. И по логину делал это дело.... А рега по уникальным майлам. Тоже канечно не спасает. Но для этого надо регить несколько акков. Тут уже можно сделать ограничение по ипу если хочется. 1 рега с одного ип в день допустим.
 
Нужно делать с помошью мускла а не файлов.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху