2009-03-21 10 views
5

Я новичок и разрабатываю веб-сайт с использованием ASP .Net 2.0 с C# 2005. Я хотел бы добавить средство для подсчета числа. посетителей моего сайта. Я собрал базовую информацию, чтобы добавить эту функцию, используя Global.asax. Я ввел изменения в Web.config, добавив строку «» в разделе system.web.Реализация счетчика посетителей

Я использую таблицу, чтобы сохранить количество посетителей. Но я не знаю, как выполнить задачу. Мой файл Global.asax по умолчанию имел разные разделы Application_Start, Application_End, Application_Error, Session_Start и Session_End. Я попытался извлечь текущее значение счетчика в разделе Application_Start и сохранить в глобальной переменной. Я бы увеличил счетчик в Session_Start и записал измененное значение в таблицу в Application_End.

Я попытался использовать общедоступные подпрограммы/функции. Но где я должен разместить эти подпрограммы? Я попытался добавить подпрограммы в самом Global.asax. Но теперь я получаю ошибки, так как я не могу добавить ссылку на Data.SqlClient в Global.asax, и мне нужны ссылки на SqlConnection, SqlCommand, SqlDataReader и т. Д. Для реализации функций. Нужно ли добавлять файлы классов для каждой подпрограммы? Пожалуйста, направляйте меня.

Я также хотел бы использовать функцию отслеживания на своем веб-сайте и хранить IP-адрес, используемый браузер, дату и время посещения, разрешение экрана и т. Д. Моих посетителей веб-сайтов. Как мне это сделать?

Ожидание предложений.

Лалита Кумар Barik

+0

Я проверил это и смог ссылаться на System.Data.SQLClient пространство имен и использовал классы для подключения к БД в файле global.asax. Какие ошибки вы испытываете? –

+0

Я добавлял ссылку, используя System.Dat a.SqlClient; в Global.asax и получить ошибку. Теперь я перешел на <% @ Import Namespace = "System.Data.SqlClient"%> в Global.asax и не искал никаких ошибок. Как реализовать глобальную переменную, доступную во ВСЕХ страницах/формах? Lalit Kumar Barik – LalitBarik

ответ

1

Аналитический сценарий Google - это именно то, что вам нужно. Потому что сеанс также откроется для сканеров.

+0

Другой способ - использовать файлы журнала IIS, существует множество инструментов, обеспечивающих их синтаксический анализ. – omoto

3

Использование Google Analytics. Не пытайтесь изобретать колесо, если a) колесо не делает то, что вы хотите, или b) вы просто пытаетесь выяснить, как работает колесо.

+0

Спасибо за ваш ответ. Я буду использовать Google Analytics, как было предложено. Но все же я заинтересован в добавлении моего собственного стиля/версии Visitor Counter, по крайней мере, чтобы узнать и расширить свои знания. Я хочу знать, как реализовать общедоступную/общую функцию и глобальные переменные в ASP.Net 2.0. L.K. Barik – LalitBarik

+0

Gareth> Если вы используете Google Analytics, то как отображать счетчик посетителей на вашей веб-странице? ИЛИ Любой другой счетчик веб-посетителей, который я могу использовать, который не помещает в него свой собственный URL или совет? – Jasper

1

Я могу только повторить предложение Гарета использовать уже имеющееся анализ трафика. Если вам не нравится идея предоставления данных Google на трафике вашего сайта, вы также можете загрузить файлы журнала и проанализировать их с одним из множества доступных web server log file analysis tools.

+0

Adrian> Если вы используете Google Analytics, то как отображать счетчик посетителей на вашей веб-странице? ИЛИ Любой другой счетчик веб-посетителей, который я могу использовать, который не помещает в него свой собственный URL или совет? – Jasper

6

Для наивной реализации вы можете использовать пользовательский HttpModule. Для каждого запроса к вашему приложению, вы бы:

  1. Проверьте, Request.Cookies включает в себя отслеживание Cookie
  2. Если трекинг куки не существует, это, вероятно, новый посетитель (или же их печенье Истек срок действия - см. 4.)
  3. Новый пользователь, зарегистрируйтесь для посетителя, а затем обновите кол-во посетителей
  4. Добавьте cookie отслеживания в ответ, который будет отправлен обратно посетителю. Вы хотите, чтобы этот файл cookie имел довольно длительный срок действия, поэтому вы не получаете много «ложных срабатываний» с возвращающимися пользователями, чьи файлы cookie истекли.

Вот некоторые скелеты ниже код (сохранить как 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 
    } 
} 

Зарегистрируйте этот модуль добавив следующие строки в Web.конфигурационный файл:

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

(Заменить имя вашего проекта веб-приложения, или удалить его, если вы используете веб-сайт проекта

Будем надеяться, что это будет достаточно, чтобы вы начали экспериментировать.. Как отмечали другие, хотя для реального сайта вам гораздо лучше использовать Google (или какое-то другое) решение для аналитики.

 Смежные вопросы

  • Нет связанных вопросов^_^