[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Одно сообщение в сутки с одного IP
nikudza
Здрасте, уважаемые пэхапэ-программёры!
Вопрос такой:
Пытаюсь сделать, грубо говоря, что-то вроде страницы комментариев. Комментаторы не регистрируются. Но количество камментов с одного IP и одного компьютера нужно ограничить до одного в сутки. Причем, чтоб смена браузера не помогала (это к слову об использовании кукисов). Как это лучше всего реализовать, хотя бы на основе чего?
Буду благодарен как за общее задание направления, так и за конкретику.



Спустя 2 минуты, 28 секунд (28.01.2011 - 14:05) aH6y написал(а):
nikudza
Заходит пользователь. Пишет коммент - ты записываешь коммент и его ip в бд.
Когда он заходит снова. Проверяешь его ip. Если он есть в бд, то запрещаешь добавлять коммент. Если нет, то разрешаешь.

Спустя 2 минуты, 14 секунд (28.01.2011 - 14:07) Snus написал(а):
aH6y
Ты не учитываешь, что куча провайдеров, где ИП динамический. Или же все выходят с одного внешнего ИП

Спустя 29 минут, 40 секунд (28.01.2011 - 14:37) nikudza написал(а):
aH6y - а как сбрасывать (обнулять)? Ведь нужно через 24 часа разрешить снова этому юзеру, либо раз в сутки сбрасывать всех.

Snus - ЙА учитываю. Потому и спрашиваю, как лучше. Единственное, возможно, не совсем корректно поставил вопрос - одно сбщ в сутки от одного пользователя. С учетом отсутствия регистрации. Может есть какой-нить индивидуальный номер компа или что-то в этом духе?

В контексте уже имеющихся ответов вынужден поставить вопрос даже так: это вообще осуществимо?..

Спустя 3 минуты, 4 секунды (28.01.2011 - 14:40) fallow написал(а):
Запомнить много информаций о пользователе ip, браузер и время создания коммента ещё куча чего.
Потом при следующем коменте сравнивать все что есть с тем что будет.. при проверке получать определённый процент записыая в массив или куда нить, и исходя из результата разрешать или нет ставить коммент) К примеру получил 90% совпадоса и 24 часа не прошло не разрешай, иначе пусть пишет, или 90% и 24ч прошло, ну и.т.д biggrin.gif
Конечно не точно но, всё же)

Ну или напиши красным шрифтом, мол напишешь сюда сегодня ещё что нибудь, то злой админ порвёт тебя не кусочки biggrin.gif

Спустя 2 минуты, 38 секунд (28.01.2011 - 14:42) Snus написал(а):
nikudza
Используй куки. Только один минус - юзверь может их обнулить.

Спустя 2 минуты, 27 секунд (28.01.2011 - 14:45) LRCenter написал(а):
nikudza
Для более надежной идентификации может пригодится такая библиотечка, http://www.xakep.ru/post/54434/

Хотя это какбы нарушение прав человека. Но всякие контакты и прочие популярные службы ее используют, или что то подобное точно.

Спустя 3 минуты, 3 секунды (28.01.2011 - 14:48) nikudza написал(а):
Snus - минус один, но принципиальный. Нужно, чтоб не мог smile.gif
А вообще - ведь банят же как-то по IP - и это с учетом динамических и общих внешних IPшников... Что, всех сразу банят?

Спустя 11 минут, 37 секунд (28.01.2011 - 14:59) Админ написал(а):
а ещё интересный момент - есть такие провайдеры у всех пользователей которых во внешней сети IP одинаковый и всегда один и тот же - то есть один оставит коммент а остальные юзеры этого провайдера в пролёте

Спустя 7 минут, 38 секунд (28.01.2011 - 15:07) nikudza написал(а):
Админ - во, вот именно, так как же тогда банят по IP? Или это уже не модно?wink.gif

LRCenter - спасибо за наводку - сложновато, конечно, да и слишком пафосно для прожекта, который Йа пытаюсь воплотить (это явно не банк и даже не социальная сеть biggrin.gif), но даже просто из любопытства - интересно.
Кста, юзать даже обычные куки я не особо умею пока что... Ну то такое...))

Так всё-таки, а стандартными средствами?..

Спустя 2 минуты, 49 секунд (28.01.2011 - 15:10) Админ написал(а):
nikudza
Цитата
Админ - во, вот именно, так как же тогда банят по IP? Или это уже не модно

ещё как модно - просто всем по барабану одного тебя забанят или всю подсеть.

Спустя 4 минуты, 45 секунд (28.01.2011 - 15:15) nikudza написал(а):
Админ - а если динамический? Тогда бесполезно?

fallow - про красную надпись шикарно, подумаю))
Можно ещё вручную удалять из базы всё, что они напостят в течении суток biggrin.gif

И еще: допустим, придумается, как запомнить пользователя. Как сделать ограничение в сутки? Делать на каждого какой-нить счетчик? Как? Или обнулять базу раз в сутки (красиво и мистично - в полночь)? И, опять-таки, - как?

Спустя 5 минут, 27 секунд (28.01.2011 - 15:20) Админ написал(а):
nikudza
единственный надёжный вариант куки и http://samy.pl/evercookie/

либо банить весь диапазон

Спустя 8 минут (28.01.2011 - 15:28) DedMorozzz написал(а):
Делай проверку по айпи и всё. Этого хватит. Никто не станет заходить и менять себе айпи. А динамич айпи и так раз в сутки меняется.
Те же файлообменики, аля рапидшар, депозит... по такому же принципу работают.

Спустя 17 минут, 13 секунд (28.01.2011 - 15:45) alex12060 написал(а):
Суешь в базу, если дата была вчерашней, то после этой проверки куки стираются, в принципе как и ИП.

Иначе, показываешь пользоователю кукиш. Только одно условие, чтобы у тебя хотя бы 1 человек в день появлялся там и выполнял (внутренне) функцию проверки на устаревщие ИП. По такиму принципу делается список посетителей на сайте.

Спустя 57 минут, 32 секунды (28.01.2011 - 16:43) nikudza написал(а):
alex12060 - признатьсчя, вообще ничего не понял. Слова понимаю, конструкцию - никак. Йа ведь не просто так разместил топик в "PHP для начинающих" - ибо оным и являюсь, даже более чем.

По сути, задача разбивается (пока что) на две: 1) Запомнить пользователя; 2) сделать так, чтоб сутки он постить не мог, а потом снова мог. Вот вторую часть пока что совсем смутно представляю, как можно реализовать. Какие могут быть задействованы механизмы? Таймер? На каждого? Или обнуление раз в сутки для всех? Делать это средствами PHP или, возможно, в самом SQL есть что-то подобное?

Знаю, на некоторых форумах и блогах можно постить не чаще чем раз в 5-10 мин. Как это делается?

Спустя 1 час, 4 минуты, 54 секунды (28.01.2011 - 17:48) fallow написал(а):
nikudza
Цитата
fallow - про красную надпись шикарно, подумаю))
Можно ещё вручную удалять из базы всё, что они напостят в течении суток 

И еще: допустим, придумается, как запомнить пользователя. Как сделать ограничение в сутки? Делать на каждого какой-нить счетчик? Как? Или обнулять базу раз в сутки (красиво и мистично - в полночь)? И, опять-таки, - как?

Как- как) Да чем тебе мой вариант не сгодился? Собрать как больше много информаций о пользователе + время создания = положить в бд. Затем кто - то начинает постить. С него собирёшь так - же как больше инфы, т.е такую же инфу точно как и предыдущего постера(свой стандарт уж будет biggrin.gif ). Затем сравниваешь. Получешь конкретный %, и в зависимости от него пропускаешь постера или нет.
А там определённый диапазон создаешь, к примеру от 0% до 50% true и 50% до 100% false.
Ещё можно + записать ему куки потом когда сравнивать будешь и их учитывать.

Цитата
Кста, юзать даже обычные куки я не особо умею пока что... Ну то такое...))

А может ты ещё и про глобальные массивы не слышал?) С помощью них много чего можно собрать...
Наверно в сутки можно изменить только бразуер и ип и в редких случаях что-то ещё.
Да и вообще флудить сейчас не модно tongue.gif

Спустя 42 минуты, 43 секунды (28.01.2011 - 18:30) nikudza написал(а):
Где флуд?! ohmy.gif
biggrin.gif biggrin.gif biggrin.gif
Про глобальные массивы в курсе, хотя пока не оч много знаю. А вот о том, что можно "от 0% до 50% true и 50% до 100% false" - слышу первый раз и юзать пока не умею. Нуб такой нуб))
Ну ничо, буду учица. Спасибо за подсказочку, подумаю.

Если у кого есть еще варианты - подсказывайте, буду спасибо!

Спустя 8 минут, 41 секунда (28.01.2011 - 18:39) Dron19 написал(а):
Цитата (Snus @ 28.01.2011 - 11:42)
nikudza
Используй куки. Только один минус - юзверь может их обнулить.

верно, по сколько он это может сделать, это не подходит... нужно что нибудь другое придумать

Спустя 33 минуты, 5 секунд (28.01.2011 - 19:12) fallow написал(а):
nikudza
Цитата
А вот о том, что можно "от 0% до 50% true и 50% до 100% false" - слышу первый раз


Азы как-бы ;)

$a = 51;

if($a >= 1 && $a <= 50)
echo "Число $a лежит в диапазоне от 1 до 50";
elseif($a >= 50 && $a <= 100)
echo "Число $a лежит в диапазоне от 50 до 100";

Спустя 8 часов, 22 минуты, 29 секунд (29.01.2011 - 03:35) nikudza написал(а):
fallow, мы говорим о простом сравнении чисел или о процентах совпадения(!!!) разнородной информации?.. По идее, немного разные вещи. Честно, Йа реально многого не знаю, поправь, если ошибаюсь.

Спустя 5 часов, 54 минуты, 14 секунд (29.01.2011 - 09:29) fallow написал(а):
nikudza
А чем проценты от чисел отличаются? Если просто собирая заносит числа в массив
$a = array();
function(...)
{
if(....)
$a[] .= 10;
if(...)
$a[] .= 10;
if(...)
$a[] .= 10;
//....далее

//итого на выходе получишь как-бы процент, например 9вещей совпало
//получаешь 90%, потом сравниваешь.

return $a;
}

Ну это только мысли, начинку думать тебе.

Спустя 14 часов, 14 минут, 15 секунд (29.01.2011 - 23:43) alex12060 написал(а):
Блин, могу только объяснить на пальцах) Писать лень, долго и муторно)

Спустя 54 минуты, 29 секунд (30.01.2011 - 00:38) aH6y написал(а):
Snus
Cookies - не вариант.
Обнулять проверкой при любой активности занося время добавления комментария с определённого ip. Если время прошло - удаляешь из бд.

Спустя 1 день, 1 час, 6 минут, 35 секунд (31.01.2011 - 01:44) nikudza написал(а):
fallow - честно, подумал, что есть такая функция, типа заносишь много разных данных а оно по какому-нибудь хитрожолтому алгоритму высчитывает процент совпадения))
Цитата (aH6y @ 29.01.2011 - 21:38)
Если время прошло - удаляешь из бд

Как??? Вручную?? Или как кодом сказать, что время пришло??
Очистить базу не вопрос (вроде никогда не было недостижимой функцией), вопрос - как это автоматизировать?
Это вообще осуществимо средствами PHP?

Спустя 1 час, 19 минут, 21 секунда (31.01.2011 - 03:04) aH6y написал(а):
nikudza
Да вполне осуществимо smile.gif

При добавлении комментария записываешь в бд время unix в секундах и ip.

При входе на страницу проверяешь есть ли текущий ip в таблице. Если есть, то проверяешь сколько секунд назад была добавлена запись с этого ip. Если больше 86400 секунд (сутки) назад, то показываешь форму добавления коммента. Если меньше, то выводишь надпись: "Извините, но вы уже добавляли комментарий в течении последних суток."

Как-то так )

Спустя 6 часов, 15 минут, 32 секунды (31.01.2011 - 09:19) nugle написал(а):
А так нель3я сделать: $_SERVER['REMOTE_ADDR'] 3аносишь в бд и его время функцией time(); потом проверяешь если время меньше 24 часов,то 3апрещаеш писать комменты!

Спустя 8 часов, 51 минута, 11 секунд (31.01.2011 - 18:10) nikudza написал(а):
aH6y
Цитата
проверяешь сколько секунд назад была добавлена запись с этого ip

Уж простите за такую совсем конкретную конкретику, но вот как раз интересно, как это проверить? Хотя бы наметки кода, какие функции юзать?
Быстрый ответ:

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