2009-03-21 20 views
5

Je suis un débutant et je développe un site Web en utilisant ASP. Net 2.0 avec C# 2005. Je voudrais ajouter une facilité pour compter le non. des visiteurs de mon site Web. J'ai rassemblé les informations de base pour ajouter cette fonctionnalité en utilisant Global.asax. J'ai apporté des modifications à Web.config en ajoutant la ligne "" sous la section system.web. J'utilise une table pour garder le nombre de visiteurs. Mais je ne sais pas comment terminer la tâche. Mon fichier Global.asax par défaut est venu avec différentes sections Application_Start, Application_End, Application_Error, Session_Start et Session_End. J'ai essayé d'extraire la valeur actuelle du compteur dans la section Application_Start et de stocker dans une variable globale. Je voudrais incrémenter le compteur dans Session_Start et écrire la valeur modifiée dans la table dans Application_End.Mise en place d'un compteur de visiteurs

J'ai essayé d'utiliser des sous-programmes/fonctions publics. Mais où dois-je placer ces sous-routines? J'ai essayé d'ajouter les sous-programmes dans le Global.asax lui-même. Mais maintenant je reçois des erreurs, car je ne peux pas ajouter de référence à Data.SqlClient dans Global.asax et j'ai besoin de références à SqlConnection, SqlCommand, SqlDataReader, etc. pour implémenter les fonctionnalités. Dois-je ajouter des fichiers de classe pour chaque sous-programme? Guidez-moi s'il-vous-plaît. Je voudrais également mettre en œuvre la fonction de suivi sur mon site Web et stocker l'adresse IP, le navigateur utilisé, la date et l'heure de la visite, la résolution de l'écran, etc. des visiteurs de mon site Web. Comment puis-je le faire?

En attente de suggestions.

Lalit Kumar Barik

+0

J'ai vérifié cela et j'ai pu référencer System.Data.SQLClient namespace et utilisé les classes pour se connecter à une base de données dans le fichier global.asax Quelles erreurs rencontrez-vous? –

+0

J'ajoutais la référence en utilisant System.Dat a.SqlClient; dans Global.asax et obtenir une erreur. Maintenant, j'ai changé pour <% @ Importer l'espace de noms = "System.Data.SqlClient"%> dans Global.asax et ne pas générer d'erreur. Comment implémenter une variable globale accessible dans TOUTES les pages/formulaires? Lalit Kumar Barik – LalitBarik

Répondre

1

Google analytique script est exactement ce dont vous avez besoin. Parce que la session, va s'ouvrir pour les robots d'exploration aussi. Pour une implémentation naïve, vous pouvez utiliser un HttpModule personnalisé.

+0

Une autre façon est d'utiliser les fichiers journaux IIS, existe beaucoup d'outils qui fournit l'analyse de ceux-ci. – omoto

3

Utilisez Google Analytics. N'essayez pas de réinventer la roue sauf si a) la roue ne fait pas ce que vous voulez ou b) vous essayez juste de savoir comment la roue fonctionne

+0

Merci pour votre aimable réponse. J'utiliserai Google Analytics comme suggéré. Mais je suis toujours intéressé à ajouter mon propre style/version de Visitor Counter, au moins pour apprendre et élargir mes connaissances. Je veux savoir comment implémenter une fonction publique/commune et des variables globales dans ASP.Net 2.0. L.K. Barik – LalitBarik

+0

Gareth> Si on utilise Google Analytics, alors comment afficher le nombre de visiteurs sur votre page web? OU Tout autre compteur de visiteurs Web que je peux utiliser ne met pas sa propre URL ou adv à l'intérieur? – Jasper

1

Je peux seulement appuyer la suggestion de Gareth d'utiliser un déjà disponible analyse de trafic. Si vous n'aimez pas l'idée de donner des données Google sur le trafic de votre site Web, vous pouvez également télécharger les fichiers journaux et les analyser avec l'un des nombreux web server log file analysis tools disponibles.

+0

Adrian> Si vous utilisez Google Analytics, comment afficher le nombre de visiteurs sur votre page Web? OU Tout autre compteur de visiteurs Web que je peux utiliser ne met pas sa propre URL ou adv à l'intérieur? – Jasper

6

Pour chaque demande à votre demande, vous feriez:

  1. Vérifiez si Request.Cookies comprend un Cookie de suivi
  2. Si le cookie de suivi n'existe pas, cela est probablement un nouveau visiteur (ou bien, leur biscuit a expiré - voir 4.)
  3. Pour un nouveau visiteur, consignez les statistiques des visiteurs, puis mettez à jour le nombre de visiteurs
  4. Ajoutez le cookie de suivi à la réponse renvoyée au visiteur. Vous souhaiterez définir ce cookie pour avoir une période d'expiration assez longue, de sorte que vous n'obtenez pas beaucoup de «faux positifs» avec les utilisateurs de retour dont les cookies ont expiré.

est ici un code squelette ci-dessous (Enregistrer sous 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 
    } 
} 

Enregistrer ce module en ajoutant les lignes suivantes à votre Web.fichier de configuration:

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

(Remplacer par le nom de votre projet d'application Web, ou le supprimer si vous utilisez un projet de site Web

Espérons que cela va être suffisant pour vous aider a commencé à expérimenter.. Comme d'autres l'ont fait remarquer, pour un site réel, il vaut mieux utiliser Google (ou une autre solution d'analyse) pour cela: