Pagina 2 di 2 PrimoPrimo 12
Visualizzazione risultati 31 fino 52 di 52

Discussione: Intercettare ip e spider

  1. #31
    Guest

    Predefinito


  2. #32
    Guest

    Predefinito

    Si, funziona, ho provato a togliere il cookie.

    Ho notato una cosa, nel db scattano 2 visite alla volta, invece di una.

  3. #33
    Guest

    Predefinito

    perche' nel sito hai un redirect che si vede pure a occhio nudo (la pagina si carica due volte)

  4. #34
    Guest

    Predefinito

    Citazione Originalmente inviato da FormularioDiDrakensang Visualizza messaggio
    perche' nel sito hai un redirect che si vede pure a occhio nudo (la pagina si carica due volte)
    Dov'è che lo tolgo.

  5. #35
    Guest

    Predefinito

    gruppoalveo.it carica correttamente
    www.gruppoalveo.it trasferisce gruppoalveo.altervista.org che trasferisce a gruppoalveo.it

  6. #36
    Guest

    Predefinito

    Citazione Originalmente inviato da FormularioDiDrakensang Visualizza messaggio
    gruppoalveo.it carica correttamente
    www.gruppoalveo.it trasferisce gruppoalveo.altervista.org che trasferisce a gruppoalveo.it
    E' strano, col vecchio codice scattava solo una volta...

  7. #37
    Guest

    Predefinito

    who knows :)
    ma puoi sempre filtrare le visite a distanza di 1sec, per esempio o sistemare meglio il redirect del dominio
    l'unica cosa certa è che non è colpa di isbot :P

  8. #38
    Guest

    Predefinito

    Allora mettiamoci un secondo alle visite, che modifico?

    Facendo prove ho visto che se è attivo il cookie nel mio pc, non fa passare nemmeno gli ip dei visitatori, forse c'è qualche conflitto.

    Codice PHP:
    <?php

    function isBot() {
    $agent = $_SERVER["HTTP_USER_AGENT"];
    $ip = $_SERVER['REMOTE_ADDR'];
    //$ip = "751.86"; // <--- DOPO TOGLILO
    //In alcuni ip dinamici cambia solo l'ultima parte, perciò si scrivono così, es. ip pc-ospite: 107.170.56 in $bot si scrive 107.170.
    $bot = array("googlebot","spider","crawler","scooter","yahoo! slurp","la_archiver","lycos","teoma_agent","ask jeeves","mercator","fast","msnbot","bingbot","facebookexternalhit",
    "192.187.100.154","107.170.","213.42.176.216","38.99.82.","162.243.","104.131.217.168");

    foreach (
    $bot as $item) {
    if (
    stripos($agent, $item) > -1 ) {
    return
    TRUE;
    }
    if (
    stripos($ip, $item) > -1 ) {
    return
    TRUE;
    }
    }
    return
    FALSE;
    }
    //$controllo = isBot(); // <--- DOPO TOGLILO
    //if($controllo){echo 'è un ip';} // <--- DOPO TOGLILO
    //else{echo 'non è un ip';} // <--- DOPO TOGLILO

    //Mette i dati nel DB e aumenta il contatore ad ogni visita
    function contatore($pagina) {
    //RICORDA di memorizzare l'url cookie.php +invio IN TUTTI I BROWSERs
    if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
    $continua = false;
    if (isset(
    $_SERVER['HTTP_REFERER']) != "") {
    $from = parse_url($_SERVER['HTTP_REFERER']);
    $from = $from['host'];
    }
    else {
    $from = "";
    }
    $whitelist = array(
    /*Qui scrivi l'url del mio sito in modo che quando l'utente vi arriva DA TERZI, anche se digita url +pagine, il contatore non sale.
    Se poi è nel mio sito e ci clicca su, ovviamente il contatore nel db sale*/
    "www.gruppoalveo.it", //Scrivi gli url senza http://
    "gruppoalveo.it",
    "www.gruppoalveo.altervista.org",
    "gruppoalveo.altervista.org"
    );
    foreach (
    $whitelist as $sito) {
    if (
    $from == $sito) $continua = true;
    }
    if (
    isBot() ) {
    }
    else {
    if (
    $continua) {
    $data_localeS=time();
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $giorno=array('Dom','Lun','Mar','Mer','Gio','Ven','Sab');
    $mese=array('gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic');
    $dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $url = $_SERVER['PHP_SELF'];
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
    if (
    $esiste->num_rows == 0) {
    $visite = 1;
    $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip)
    VALUES ('
    $data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");
    }
    else {
    $old = $esiste->fetch_array(MYSQLI_ASSOC);
    $visite = $old['visite'] + 1;
    $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'");
    }
    }
    }
    }
    }
    //Estrae i dati dal DB e crea la sequenza delle pagine più viste
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,8"); //Visualizza il numero di items
    if ($pag_viste->num_rows > 0) {
    echo
    "<div class=\"menuVisti\">";
    while (
    $link = $pag_viste->fetch_array(MYSQLI_ASSOC)) {
    echo
    "<div class=\"numeroVisite\">".$link["visite"]." volte</div>";
    echo
    "<a class=\"visti\" href='".$link['url']."'>&bull;&nbsp;&nbsp;&nbsp;".$link['pagina']."</a>";
    }
    echo
    "</div>";
    }

    error_reporting (E_ALL);
    ?>
    Ultima modifica di gruppoalveo : 22-10-2014 alle ore 02.02.24

  9. #39
    Guest

    Predefinito

    non c'è conflitto tra isBot e il resto piuttosto $continua = undef se c'è il cookie

    dimostrazione
    Codice PHP:
    function contatore($pagina) {
    // se non c'è il cookie
    $continua = false
    $from
    = %qualcosa%
    }
    else {
    // se c'è il cookie
    $from = "";
    }
    ...
    foreach (
    $whitelist as $sito) {
    if (
    $from == $sito) $continua = true; // se from = "", nessun sito in whitelist corrisponde
    }

    da questo punto e fino alla fine: $continua = undef

    doppie visite: ci sono vari modi, i piu' semplici
    rendi la data visita espressa in giorno/mese/anno-ora/minuti + ip visitatore chiave, aka non saranno accettate 2+ visite dello stesso ip in 1 minuto
    oppure se memorizzi l'intero timestamp prima di insert spendi una query per chiederti se esiste una visita di questo ip risalente a meno di %tolleranza% secondi/millisecondi fa
    Ultima modifica di FormularioDiDrakensang : 22-10-2014 alle ore 11.31.51

  10. #40
    Guest

    Predefinito

    Ho fatto una prova con un visitatore, il db registra la sua visita, la mia no, ovviamente.

    Il db inserisce così: 1413965682 Mer 22 ott 2014 - 10:14:42 "Stare da Dio" /stare-da-dio.php Visite:36 Ip:93.45.210.129

  11. #41
    Guest

    Predefinito

    come scritto sopra se non correggi contatore() affinchè scriva qualcosa in from nel caso in cui ci sia il cookie o comunque setti continua=true; la visita non verrà mai conteggiata fintanto che non scade il cookie, se è quello che vuoi il codice è corretto

    db: ok usi epoch, puoi fare riferimento a quanto scritto prima per il filtro
    Ultima modifica di FormularioDiDrakensang : 22-10-2014 alle ore 11.40.57

  12. #42
    Guest

    Predefinito

    Non so cos'è epoch, uso mysql.

    Che ci metto qui;

    function contatore($pagina) {
    if (empty($_COOKIE["contavisite"])) { //Richiama il cookie che c'è in cookie.php
    $continua = false;
    if (isset($_SERVER['HTTP_REFERER']) != "") {
    $from = parse_url($_SERVER['HTTP_REFERER']);
    $from = $from['host'];
    }
    else {
    $from = "";
    }
    $whitelist = array(
    ...

  13. #43
    Guest

    Predefinito

    se devi contare la visita anche se cookie è settato

    else {
    $from = "";
    $continua = true;
    }

    ---
    epoch

    1413965682 Mer 22 ott 2014
    questo numero lungo è il numero di secondi dal 1/1/1970, ovvero quello che da time()

    per sapere se c'è una visita di meno 5 secondi fa (redirect)
    select un_campo_qualsiasi_inutile_prenderli_tutti FROM la_tabella WHERE timestamp_attuale - il_campo_con_il_timestamp < 5

    se restituisce almeno una riga, ignori la visita, cioè non fai insert
    Ultima modifica di FormularioDiDrakensang : 22-10-2014 alle ore 11.57.30

  14. #44
    Guest

    Predefinito

    Io devo contare solo le visite dei visitatori (ma non se entrano direttamente dalla home, solo quelle che linka nel sito), il cookie è solo per me

  15. #45
    Guest

    Predefinito

    allora il codice è gia' giusto cosi

  16. #46
    Guest

    Predefinito

    Si, ma c'è da sistemare il doppio inserimento nel db…io non cosa toccare.

  17. #47
    Guest

    Predefinito

    l'ho scritto al messaggio #43

    hai due scelte, il metodo della chiave
    il metodo della ricerca

    per il primo non devi fare niente nel codice php, ma solo nel db (oh be dipende dalla struttura del db)

    nel secondo

    $q = mysql_query ( quello che ho scritto sopra )
    if ( mysql_num_rows($q) ) $continua = false;

    il tutto prima di
    if ($continua) {
    $data_localeS=time();
    Ultima modifica di FormularioDiDrakensang : 22-10-2014 alle ore 13.09.34

  18. #48
    Guest

    Predefinito

    Sto tentando d capire il secondo metodo.

  19. #49
    Guest

    Predefinito

    devi solo sostituire ai nomi di fantasia i nomi dei campi della tua tabella

    esempio pratico:
    $t = time();
    $q = mysql_query ( "SELECT * FROM visite WHERE $t - timestamp_visita < 5 AND ip = $ip" );
    if ( mysql_num_rows($q) ) $continua = false;
    Ultima modifica di FormularioDiDrakensang : 22-10-2014 alle ore 21.27.44

  20. #50
    Guest

    Predefinito

    Inserisce ancora doppio

    Codice PHP:
    $data_localeS = time();
    $q = mysql_query ( "SELECT * FROM visitate WHERE $data_localeS - timestamp_visita < 5 AND ip = $ip" );
    if (
    mysql_num_rows($q) ) $continua = false;

    if (
    $continua) {
    $data_localeS=time();
    $mysqli = new mysqli("localhost", "gruppoalveo", "root", "my_gruppoalveo");
    $giorno=array('Dom','Lun','Mar','Mer','Gio','Ven','Sab');
    $mese=array('gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic');
    $dataGmtS=$giorno[date('w')].' '.date('d').' '.$mese[date('m')-1].' '.date('Y - H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $url = $_SERVER['PHP_SELF'];
    $esiste = $mysqli->query ("SELECT * FROM visitate WHERE url='$url'");
    if (
    $esiste->num_rows == 0) {
    $visite = 1;
    $mysqli->query ("INSERT INTO visitate(data_localeS, dataGmtS, pagina, url, visite, ip)
    VALUES ('
    $data_localeS', '$dataGmtS', '$pagina', '$url', '$visite', '$ip')");
    }
    else {
    $old = $esiste->fetch_array(MYSQLI_ASSOC);
    $visite = $old['visite'] + 1;
    $mysqli->query("UPDATE visitate SET data_localeS='$data_localeS', dataGmtS='$dataGmtS', pagina='$pagina', visite='$visite', ip='$ip' WHERE url='$url'");
    }
    ...

  21. #51
    Guest

    Predefinito

    Con timestampvisita intendo il campo della tabella in cui la data è un numero lungo

  22. #52
    Guest

    Predefinito

    Ok, funziona finalmente, mancavano gli apici e la variabile. Quel < 5 sono i secondi di ritardo?


    Codice PHP:
    $data_localeS = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    $q = mysql_query ("SELECT * FROM visitate WHERE $data_localeS - data_localeS < 5 AND ip = '$ip'" );
    if (
    mysql_num_rows($q) ) $continua = false;
    if (
    $continua) {
    $data_localeS=time();
    ...
    Ultima modifica di gruppoalveo : 22-10-2014 alle ore 23.48.36

Pagina 2 di 2 PrimoPrimo 12

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •