Webmaster общности: Predpriemach.com | SearchEngines.bg

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

    php mysql уроци

    Автор: 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 мин.

    Какво представлява кода:

    1. Отваряме сесия.
    2. Свързваме се към базата данни.
    3. Присвояваме времето (unixtimestamp) към променливата $time.
    4. Проверяваме дали бисквитката е true.
    5. Ако не е тогава е създаваме бисквитката като задаваме инето на бисквитката, описанието и времето тя да е валидна.
    6. Ако е създадена бисквитата проверяваме това с $cc, тогава задаваме тя да е true.
    7. Взимаме IP и HOSTNAME на човека влезнал в сайта туко що.
    8. Слагаме малко защити на IP и HOSTNAME, просто за малко по-сигурно.
    9. Излизаме от if проверката.
    10. Присвояваме времето (unixtimestamp) към променлива и вадим 5 минутни от нея.
    11. Изтриваме от базата данни всички записи там където времето въвъдено при запис на базата данни е равно или повече от 5 минути (това се извършва посредством WHERE клауза с променливата която сме присвоили към точка 10).
    12. Изкарваме резултатите.
    <?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>