2009-03-21 18 views
5

Sono un principiante e sviluppo di un sito Web utilizzando ASP .Net 2.0 con C# 2005. Vorrei aggiungere una funzione per contare il no. dei visitatori del mio sito web. Ho raccolto le informazioni di base per aggiungere questa funzionalità usando Global.asax. Ho apportato modifiche a Web.config aggiungendo la riga "" nella sezione system.web.Implementazione di un contatore di visitatori

Sto usando una tabella per mantenere il conteggio dei visitatori. Ma non so come completare il compito. Il mio file Global.asax predefinito è venuto con diverse sezioni Application_Start, Application_End, Application_Error, Session_Start e Session_End. Ho provato ad estrarre il valore corrente del contatore nella sezione Application_Start e memorizzare in una variabile globale. Vorrei incrementare il contatore in Session_Start e scrivere il valore modificato nella tabella in Application_End.

Ho provato a utilizzare le subroutine/funzioni pubbliche. Ma dove dovrei posizionare quelle subroutine? Ho provato ad aggiungere le subroutine nello stesso Global.asax. Ma ora sto ricevendo errori, poiché non posso aggiungere riferimenti a Data.SqlClient in Global.asax e ho bisogno di riferimenti a SqlConnection, SqlCommand, SqlDataReader ecc. Per implementare le funzionalità. Devo aggiungere file di classe per ogni subroutine? Per favore guidami.

Vorrei anche per implementare funzionalità di rilevamento al mio sito web e memorizzare l'indirizzo IP, browser utilizzato, data e ora della visita, la risoluzione dello schermo, ecc dei miei siti web visitatori. Come posso farlo?

In attesa di suggerimenti.

Lalit Kumar Barik

+0

Ho verificato questo ed è stato in grado di fare riferimento al System.Data.SQLClient namespace e utilizzato le classi per connettersi a un DB nel file global.asax. Quali errori si verificano? –

+0

Stavo aggiungendo il riferimento come utilizzando System.Dat a.SqlClient; in Global.asax e ottenere errore. Ora ho cambiato in <% @ Import Namespace = "System.Data.SqlClient"%> in Global.asax e non ho riscontrato alcun errore. Come implementare una variabile globale accessibile in TUTTE le pagine/forme ?? Lalit Kumar Barik – LalitBarik

risposta

1

Lo script analitico di Google è esattamente ciò di cui hai bisogno. Perché la sessione si aprirà anche per i crawler.

+0

Un altro modo è utilizzare i file di registro di IIS, esistono molti strumenti che forniscono l'analisi di essi. – omoto

3

Usa Google Analytics. Non provare a reinventare la ruota a meno che a) la ruota non faccia quello che vuoi o b) stai solo cercando di scoprire come funziona la ruota

+0

Grazie per la cortese risposta. Userò Google Analytics come suggerito. Ma sono comunque interessato ad aggiungere il mio stile/versione di Visitor Counter, almeno per imparare ed espandere le mie conoscenze. Voglio sapere come implementare una funzione pubblica/comune e le variabili globali in ASP.Net 2.0. L.K. Barik – LalitBarik

+0

Gareth> Se si utilizza Google Analytics, come visualizzare il conteggio dei visitatori sulla tua pagina web? O qualsiasi altro contatore di visitatori web che posso usare che non mette il suo URL o adv al suo interno? – Jasper

1

Posso solo secondo il suggerimento di Gareth di usare una ruota già disponibile analisi del traffico. Se non ti piace l'idea di dare i dati di Google sul traffico del tuo sito web, è anche possibile scaricare i file di log e analizzarli con uno dei tanti web server log file analysis tools disponibili.

+0

Adrian> Se si utilizza Google Analytics, come visualizzare il conteggio dei visitatori sulla tua pagina web? O qualsiasi altro contatore di visitatori web che posso usare che non mette il suo URL o adv al suo interno? – Jasper

6

Per un'implementazione ingenua, è possibile utilizzare un costume HttpModule. Per ogni richiesta per la vostra applicazione, faresti:

  1. Verificare se Request.Cookies include un Tracking Cookie
  2. Se il cookie di tracciamento non esiste, questo è probabilmente un nuovo visitatore (o altro, il loro cookie è scaduto - vedi 4.)
  3. Per un nuovo visitatore, registrare le statistiche dei visitatori, quindi aggiornare il numero di visitatori
  4. Aggiungere il cookie di tracciamento alla risposta inviata al visitatore. Ti consigliamo di impostare questo cookie per avere un periodo di scadenza piuttosto lungo, in modo da non ottenere molti "falsi positivi" con gli utenti di ritorno i cui cookie sono scaduti.

Ecco qualche codice scheletro di seguito (salvo quanto StatsCounter.cs):

using System; 
using System.Data; 
using System.Web; 
using System.Web.Security; 
using System.Transactions; 

namespace hitcounter 
{ 
    public class StatsCounter : IHttpModule 
    { 
     // This is what we'll call our tracking cookie. 
     // Alternatively, you could read this from your Web.config file: 
     public const string TrackingCookieName = "__SITE__STATS"; 

     #region IHttpModule Members 

     public void Dispose() 
     { ;} 

     public void Init(HttpApplication context) 
     { 
      context.BeginRequest += new EventHandler(context_BeginRequest); 
      context.PreSendRequestHeaders += new EventHandler(context_PreSendRequestHeaders); 
     } 

     void context_PreSendRequestHeaders(object sender, EventArgs e) 
     { 
      HttpApplication app = sender as HttpApplication; 
      HttpResponse response = app.Response; 
      if (response.Cookies[TrackingCookieName] == null) 
      { 
       HttpCookie trackingCookie = new HttpCookie(TrackingCookieName); 
       trackingCookie.Expires = DateTime.Now.AddYears(1); // make this cookie last a while 
       trackingCookie.HttpOnly = true; 
       trackingCookie.Path = "/"; 
       trackingCookie.Values["VisitorCount"] = GetVisitorCount().ToString(); 
       trackingCookie.Values["LastVisit"] = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"); 

       response.Cookies.Add(trackingCookie); 
      } 
     } 

     private long GetVisitorCount() 
     { 
      // Lookup visitor count and cache it, for improved performance. 
      // Return Count (we're returning 0 here since this is just a stub): 
      return 0; 
     } 

     void context_BeginRequest(object sender, EventArgs e) 
     { 
      HttpApplication app = sender as HttpApplication; 
      HttpRequest request = app.Request; 

      // Check for tracking cookie: 
      if (request.Cookies[TrackingCookieName] != null) 
      { 
       // Returning visitor... 
      } 
      else 
      { 
       // New visitor - record stats: 
       string userAgent = request.ServerVariables["HTTP_USER_AGENT"]; 
       string ipAddress = request.ServerVariables["HTTP_REMOTE_IP"]; 
       string time = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"); 
       // ... 
       // Log visitor stats to database 

       TransactionOptions opts = new TransactionOptions(); 
       opts.IsolationLevel = System.Transactions.IsolationLevel.Serializable; 
       using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, opts)) 
       { 
        // Update visitor count. 
        // Invalidate cached visitor count. 
       } 
      } 
     } 

     #endregion 
    } 
} 

registrare questo modulo aggiungendo le seguenti righe al Web.file di configurazione:

<?xml version="1.0"?> 
<configuration> 
    ... 
    <system.web> 
     ... 
     <httpModules> 
      <add name="StatsCounter" type="<ApplicationAssembly>.StatsCounter" /> 
     </httpModules> 
    </system.web> 
</configuration> 

(Sostituire con il nome del progetto di applicazione web, o rimuoverlo se si sta utilizzando un progetto di sito web

Speriamo che questo sarà abbastanza per iniziare a sperimentare.. Come altri hanno sottolineato, per un sito reale, è molto meglio usare Google (o qualche altra) soluzione di analisi per questo.