Посетителите в момента (с бисквитка и БД)

Автор: eddyy93
Сега ще ви покажа как може да следите хората влезнали в момента, във вашият сайт без да им е било искано потребителски логин. Тоест съвсем анонимни хора. Ще ги засичаме чрез бисквитки и ще ги записваме в базата данни. След което вие ще може да си ги изкравате резултатите във вашият примерно – администраторски панел.
Ако не успяхте да ме разберете, представете си:
Влизате в даден сайт, без още да сте мръднали мишката си, една бисквитка се е записала в вашият браузер която просто служи за проверка. Ако я имате вие сте в сайта, ако ли не. Вие не сте в сайта.
Следователно когато сте в сайта(тоест имате бисквитката), администратора ви взима IP-то и хостимето (като може и куп други работи) и си ги показва в негов отделен, може администраторски файл и по този начин следи колко човека има в сайта за последните 5 минути (тъй като съм го нагласил за 5 минути) и както казах взима на тези потребители тяхното IP и хостиме(може и различни още неща да си поиска от сървъра) и си ги изважда на екрана.
Вдъхновение от тази тема:
http://web-tourist.net/forum/viewtopic.php?t=117001
Урока си е мой, авторски.
ПЪРВО:
Създаваме база данни.
С име: cu
Таблица с име: cu
Полета в таблицата: ip, hostname, vreme
Като ip varchar(100)
Като hostname varchar(200)
Като vreme varchar(100) и му слагате index key
vreme – Също може да го направите int(100), тъй като се записва в unixtimestamp, но аз съм го направил varchar.
ВТОРО:
Попълнете правилно mysql_connect с вашите данни за връзка към базата данни.
Бисквитката е нагласена за 5 мин.
Какво представлява кода:
- Отваряме сесия.
- Свързваме се към базата данни.
- Присвояваме времето (unixtimestamp) към променливата $time.
- Проверяваме дали бисквитката е true.
- Ако не е тогава е създаваме бисквитката като задаваме инето на бисквитката, описанието и времето тя да е валидна.
- Ако е създадена бисквитата проверяваме това с $cc, тогава задаваме тя да е true.
- Взимаме IP и HOSTNAME на човека влезнал в сайта туко що.
- Слагаме малко защити на IP и HOSTNAME, просто за малко по-сигурно.
- Излизаме от if проверката.
- Присвояваме времето (unixtimestamp) към променлива и вадим 5 минутни от нея.
- Изтриваме от базата данни всички записи там където времето въвъдено при запис на базата данни е равно или повече от 5 минути (това се извършва посредством WHERE клауза с променливата която сме присвоили към точка 10).
- Изкарваме резултатите.
<?php
session_start();
mysql_connect('localhost', 'ИМЕТО ЗА ВРЪЗКА С БАЗАТА ДАННИ', 'ПАРОЛАТА');
mysql_select_db('cu');
$time=time();
if($_COOKIE['sesscheck']!=true) {
$duration = time() + (60 * 5); // 5 min, може да си го направиш по твой избор колкото искаш
$cc=setcookie('sesscheck', 'on', $duration, '/');
if($cc) {
$_COOKIE['sesscheck']=true;
$ip=htmlspecialchars(addslashes($_SERVER['REMOTE_ADDR']));
$hostname=htmlspecialchars(addslashes(gethostname()));
mysql_query("INSERT INTO `cu`(`ip`,`hostname`,`vreme`) VALUES ('$ip','$hostname', '$time')");
}
}
$time_check=$time-300; //Трябва да е равно на времето зададено на cookie то
mysql_query("DELETE FROM `cu` WHERE vreme<$time_check");
?>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
//Да приемем, че това е админ панела.
$online_row=mysql_query("SELECT * FROM `cu` ");
$online_obshto=mysql_num_rows($online_row);
echo "В момента има: ".$online_obshto." гост в сайта<br><br><br>";
while($online=mysql_fetch_assoc($online_row)){
echo "<table border='1'>";
echo "<tr><td>".$online['ip']."</td>";
echo "<td>".stripslashes($online['hostname'])."</td>";
echo "</tr></table>";
}
?>
</body>
</html>

