2009-03-21 14 views
5

Soy un novato y desarrollo un sitio web usando ASP .Net 2.0 con C# 2005. Me gustaría agregar una función para contar el no. de los visitantes de mi sitio web Recopilé la información básica para agregar esta característica usando Global.asax. Realicé modificaciones en Web.config agregando la línea "" en la sección system.web.Implementación de un contador de visitantes

Estoy usando una tabla para mantener el recuento de visitantes. Pero no sé cómo completar la tarea. Mi archivo Global.asax predeterminado viene con diferentes secciones Application_Start, Application_End, Application_Error, Session_Start y Session_End. Intenté extraer el valor actual del contador en la sección Application_Start y almacenar en una variable global. Incrementaría el contador en Session_Start y escribiría el valor modificado en la tabla en Application_End.

He intentado utilizar subrutinas/funciones públicas. Pero, ¿dónde debería colocar esas subrutinas? Traté de agregar las subrutinas en el Global.asax mismo. Pero ahora recibo errores, ya que no puedo agregar referencias a Data.SqlClient en Global.asax y necesito referencias a SqlConnection, SqlCommand, SqlDataReader, etc. para implementar las características. ¿Debo agregar archivos de clase para cada subrutina? Por favor guíame.

También me gustaría implementar la función de seguimiento en mi sitio web y almacenar la dirección IP, el navegador utilizado, la fecha y hora de visita, la resolución de pantalla, etc. de los visitantes de mis sitios web. ¿Cómo puedo hacerlo?

Estamos a la espera de sugerencias.

Lalit Kumar Barik

+0

He comprobado esto y pude hacer referencia al System.Data.SQLClient espacio de nombres y utilizó las clases para conectarse a un DB en el archivo global.asax. ¿Qué errores está experimentando? –

+0

Estaba agregando la referencia como usando System.Dat a.SqlClient; en Global.asax y obteniendo el error. Ahora he cambiado a <% @ Import Namespace = "System.Data.SqlClient"%> en Global.asax y no generé ningún error. ¿Cómo implementar una variable global accesible en TODAS las páginas/formularios? Lalit Kumar Barik – LalitBarik

Respuesta

1

Google analytic script es exactamente lo que necesita. Debido a que la sesión también se abrirá para los rastreadores.

+0

Otra forma es utilizar archivos de registro IIS, existe una gran cantidad de herramientas que proporciona el análisis de ellos. – omoto

3

Uso Google Analytics. No trate de reinventar la rueda a menos que a) la rueda no haga lo que quiera o b) simplemente esté tratando de descubrir cómo funciona la rueda

+0

Gracias por su amable respuesta. Utilizaré Google Analytics según lo sugerido. Pero aún estoy interesado en agregar mi propio estilo/versión de Visitor Counter, al menos para aprender y expandir mi conocimiento. Quiero saber cómo implementar una función pública/común y variables globales en ASP.Net 2.0. L.K. Barik – LalitBarik

+0

Gareth> Si se usa Google Analytics, ¿cómo se visualiza Visitor Count en su página web? O cualquier otro contador de visitantes web que pueda usar que no incluya su propia URL o adv dentro de él? – Jasper

1

Solo puedo sugerir la sugerencia de Gareth de utilizar una ya disponible Análisis de tráfico. Si no le gusta la idea de proporcionar datos de Google en el tráfico de su sitio web, también puede descargar los archivos de registro y analizarlos con uno de los muchos web server log file analysis tools disponibles.

+0

Adrian> Si uno usa Google Analytics, ¿cómo mostrar Visitor Count en su página web? O cualquier otro contador de visitantes web que pueda usar que no incluya su propia URL o adv dentro de él? – Jasper

6

Para una implementación ingenua, puede usar un HttpModule personalizado. Para cada solicitud en su aplicación, és:

  1. Comprobar si Request.Cookies incluye un seguimiento de la cookie
  2. Si no existe la cookie de seguimiento, esto es probablemente un nuevo visitante (o de lo contrario, su cookie ha expirado - ver 4.)
  3. Para un nuevo visitante, registre las estadísticas del visitante, luego actualice el recuento de visitantes
  4. Agregue la cookie de seguimiento a la respuesta que se le envía al visitante. Deberá configurar esta cookie para que tenga un período de caducidad bastante largo, de modo que no obtenga muchos "falsos positivos" con los usuarios recurrentes cuyas cookies hayan expirado.

Aquí hay un código esqueleto a continuación (excepto como 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 
    } 
} 

registrar este módulo añadiendo las siguientes líneas en su Web.fichero de configuración:

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

(Sustituir por el nombre de su proyecto de aplicación web, o eliminarlo si está utilizando un proyecto de sitio web

Con suerte, esto será suficiente para que pueda empezar a experimentar.. Sin embargo, como otros han señalado, para un sitio real, es mucho mejor utilizar Google (u otra) solución de análisis para esto.

Cuestiones relacionadas