<?
session_start();
$sid = session_id();
@ $db = mysql_pconnect('localhost', '', ''); mysql_select_db('');
$result = mysql_query("select * from sessions where sid = '".$sid."'");
$row = mysql_fetch_array($result);
if(mysql_num_rows($result) > 0){
if($row['sdate'] > /*ВОТ ТУТ НЕ ПОЙМУ ЧТО ПИСАТЬ?*/){
echo 'остановисььь, не так часто приятель.';
exit;
}else{
mysql_query("update sessions set sdate = NOW() WHERE sid = '".$sid."'");
}
}
else{
mysql_query("insert into sessions values('".$sid."', NOW())");
}
Спустя 3 минуты, 48 секунд (25.08.2010 - 10:34) maximka787 написал(а):
Совсем забыл
CREATE TABLE `sessions` (
`sid` varchar(32),
`sdate` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Спустя 2 минуты, 3 секунды (25.08.2010 - 10:36) Семён написал(а):
А может ну его? БД не ice на мой взгляд для таких случаев использовать.
Спустя 43 секунды (25.08.2010 - 10:36) IamSmorodin написал(а):
Семён
А как лучше проверять антифлуд?
А как лучше проверять антифлуд?
Спустя 1 минута, 3 секунды (25.08.2010 - 10:37) maximka787 написал(а):
Цитата (Семён @ 25.08.2010 - 07:36) |
А может ну его? БД не ice на мой взгляд для таких случаев использовать. |
Да я бы рад, но надо хотя бы от зажатия F5 то ограничить.) куки говорят менее эффективны. Хотя они наверно менее эффективны от профи.
Спустя 5 минут, 47 секунд (25.08.2010 - 10:43) maximka787 написал(а):
У меня сайт по перевозкам, там на странице index идет подключение к 2м базам, и всего 7 запросов к БД + арифметики на пару десятков строк. Думаю не самый лучший вариант оставить вообще без проверки)
Спустя 7 минут, 40 секунд (25.08.2010 - 10:51) Семён написал(а):
maximka787
Для этого есть AntiDDoS модули. (CISCO)
(на хостингах уже всё давно сделано за вас и настроено), если сервер ваш то настройте iptables вашей серверной ОС, если есть необходимость всё же делать защиту изза большого кол-ва запросов, реализовывайте в файловом варианте.
Вот уже народ примерно делал наработки:
http://forum.xaknet.ru/showthread.php?t=8122
http://www.google.ru/search?q=anti+ddos+ph...&client=firefox
Для этого есть AntiDDoS модули. (CISCO)
(на хостингах уже всё давно сделано за вас и настроено), если сервер ваш то настройте iptables вашей серверной ОС, если есть необходимость всё же делать защиту изза большого кол-ва запросов, реализовывайте в файловом варианте.
Вот уже народ примерно делал наработки:
http://forum.xaknet.ru/showthread.php?t=8122
http://www.google.ru/search?q=anti+ddos+ph...&client=firefox
Спустя 6 минут, 9 секунд (25.08.2010 - 10:57) maximka787 написал(а):
Семён спасибо. почитаю. Сервер не мой а hc.ru. они говорят что если начнется что-то сильное то отключат) хотя обращение к БД на проверку сессий и времени это тоже запрос к серверу. Значит почитаю то, что ты кинул и наверное куки изучу. До сих пор не было времени ими заняться)
Спустя 22 минуты, 6 секунд (25.08.2010 - 11:19) FatCat написал(а):
Цитата (maximka787 @ 25.08.2010 - 11:37) |
куки говорят менее эффективны. Хотя они наверно менее эффективны от профи. |
Основная проблема - это не дураки с кирпичом на кнопке F5, и не любители двойных кликов мышкой, а боты парсеры контента - воровалки под сплоги и дерьмопоисковки типа ХотБота, которые сайт грузят своими запросами, а посетителей с них ноль.
Без базы никак. Не только для блокировки повторного вывода по таймлимиту, но и счетчик нагрузки в базу писать, чтобы особо настырным автоматом айпишник в эйчтиакцесс дописывало.
У нас здесь такое реализовано, за неделю до 500 айпишников в бан уходит.
И авторазбан по таймеру через 10 суток, чтобы эйчтиакцесс не разрастался свыше необходимого.
Спустя 20 минут, 29 секунд (25.08.2010 - 11:40) maximka787 написал(а):
Ну я вот наверху я написал код, там есть непонятное мне место.
$row['sdate'] выводит 2010-08-20 15:00:00 например (у меня интервал не меньше 5 сек)
как доделать условие что все сессии которые были зафиксированы после
2010-08-20 15:00:05 обрабатывались, а например 2010-08-20 15:00:02 блокировалась.
Раньше я делал сравнение вот таким образом
и условие простое получалось
там раз в минуту можно было отправить запрос, те я не выводит секуды. Проверку по IP я уже не делаю, вместо него sid
$row['sdate'] выводит 2010-08-20 15:00:00 например (у меня интервал не меньше 5 сек)
как доделать условие что все сессии которые были зафиксированы после
2010-08-20 15:00:05 обрабатывались, а например 2010-08-20 15:00:02 блокировалась.
Раньше я делал сравнение вот таким образом
$data = date("Y-m-d H:i");
$query = "select DATE_FORMAT(data,'%Y-%m-%d %H:%i') as dataT, ip from book where ip='$ip'";
и условие простое получалось
if($data == $row['dataT']) { exit; } else{ ...}
там раз в минуту можно было отправить запрос, те я не выводит секуды. Проверку по IP я уже не делаю, вместо него sid
_____________
..Работает - не трогай!