Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    241

    Tenere traccia delle visite con le sessioni

    Il mio scopo č quello di salvare sul db ogni visita unica, per poi rielabolare i dati in un secondo momento ottenendo ad esempio il numero delle visite. Leggendo qui e lā nel forum mi sembra di capire che il metodo migliore č quello di utilizzare le sessioni. Ora io ho elaborato questo semplice blocco di codice, solo non so quanto valido possa essere, e i dati che ricavo quanto attendibili possano essere...

    Codice PHP:
    <?php
    session_start
    ();
    $db_host = ...;
    $db_user = ...;
    $db_password = ...;
    $db_name = ...;
    $dbms mysql_connect($db_host$db_user$db_password) or die ("Impossibile connettersi al server MySql!\n");
    $db mysql_select_db($db_name$dbms) or die ("Impossibile aprire il database db_name!\n");
    if (!isset(
    $_COOKIE['PHPSESSID'])) {
      
    mysql_open($dbms$db);
      
    $visit "INSERT INTO visits (ip_address, language, browser)
                VALUES ('
    $_SERVER[HTTP_HOST]', '$_SERVER[HTTP_ACCEPT_LANGUAGE]', '$_SERVER[HTTP_USER_AGENT]')";
      
    mysql_query($visit) or die (mysql_error());
      
    mysql_close($dbms);
    }
    ?>

  2. #2
    Nel tuo codice non fai un reale uso delle sessioni ma archivi solo i dati nel database.

    Ti suggerisco vivamente di applicare le norme di sicurezza (es. http://www.php.net/mysql_real_escape_string) su tutti i valori che inserisci nel database che si basano sui dati inviati dall'utente (es. $_SERVER['HTTP_ACCEPT_LANGUAGE'], $_SERVER['HTTP_USER_AGENT']) e non.

    http://www.php.net/manual/it/security.database.php

    Per quanto riguarda i dati che potresti voler salvare, ci sono:

    - IP ($_SERVER['REMOTE_ADDR'])
    - Host remoto ($_SERVER['REMOTE_HOST'] e/o http://www.php.net/gethostbyaddr).
    - Traduzione dell'IP in una posizione geografica (GeoIP, vedi http://ip-to-country.webhosting.info/ etc.).
    - Referrer ($_SERVER['HTTP_REFERER']) con eventuale estrazione delle keyword in caso di provenienza da motore di ricerca.
    - Host del Referrer (per velocizzare raggruppamenti e ricerche).
    - Tempo di permanenza sul sito web (utilizzando JS e/o altre tecnologie lato client)
    - Utilizzando un cookie "permanente" puoi tenere traccia del ritorno dello stesso utente.
    - L'URL richiamato, con e senza query string.

    Probabilmente vi sono altre info utili che al momento non mi vengono in mente.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    241
    Ok filippo.toso, grazie ai tuoi suggerimenti ho migliorato lo script in questo modo:

    Codice PHP:
    <?php
    session_start
    ();
    $db_host = ...;
    $db_user = ...;
    $db_password = ...;
    $db_name = ...;
    $dbms mysql_connect($db_host$db_user$db_password) or die ("Impossibile connettersi al server MySql!\n");
    $db mysql_select_db($db_name$dbms) or die ("Impossibile aprire il database db_name!\n");
    if (!
    session_is_registered("visitor")) {
      
    $visitor session_id();
      
    session_register("visitor");
      
    mysql_open($dbms$db);
      
    # ricava tutte le informazioni della visita
      
    $host_remoto mysql_real_escape_string(gethostbyaddr($_SERVER['REMOTE_HOST']));
      
    $ip_remoto mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
      
    $http_referer mysql_real_escape_string($_SERVER['HTTP_REFERER']);
      
    $ip_number sprintf("%u"ip2long($ip_remoto));
      
    $query "SELECT COUNTRY_NAME FROM `iptocountry` WHERE IP_FROM <= $ip_number and IP_TO >= $ip_number";
      
    $result mysql_query($query) or die (mysql_error());
      
    $row mysql_fetch_row($result);
      
    $country $row[0];
      
    $language mysql_real_escape_string($_SERVER['HTTP_ACCEPT_LANGUAGE']);
      
    $browser mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
      
    $os mysql_real_escape_string($_SERVER['OS']);
      
    $moment date("Y-m-d H:i:s");
      
    $visit "INSERT INTO visits (remote_host, remote_ip, http_referer, country, language, browser, os, moment)
                VALUES ('
    $host_remoto', '$ip_remoto', '$http_referer', '$country', '$language', '$browser', '$os', '$moment')";
      
    mysql_query($visit) or die (mysql_error());
      
    # visualizza visite uniche
      
    $query "SELECT COUNT(*) FROM visits";
      
    $result mysql_query($query) or die (mysql_error());
      
    $row mysql_fetch_row($result);
      echo 
    $row[0]." visite";
      
    mysql_close($dbms);
    }
    ?>
    il problema sorge quando richiamo la stessa pagina impostando i parametri via GET: mi aggiunge una nuova visita!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.