Реализация счетчика посетителей - PullRequest
5 голосов
/ 21 марта 2009

Я новичок и занимаюсь разработкой веб-сайта с использованием 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-адрес, используемый браузер, дату и время посещения, разрешение экрана и т. Д. Посетителей моих веб-сайтов. Как я могу это сделать?

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

Лалит Кумар Барик

Ответы [ 4 ]

6 голосов
/ 21 марта 2009

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

  1. Проверьте, есть ли в Request.Cookies файл cookie для отслеживания
  2. Если cookie-файл для отслеживания не существует, возможно, это новый посетитель (или же срок действия его cookie-файла истек - см. 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.config:

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

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

Надеюсь, этого будет достаточно, чтобы вы начали экспериментировать. Однако, как уже отмечали другие, для реального сайта вам гораздо лучше использовать для этого аналитическое решение Google (или другого решения).

3 голосов
/ 21 марта 2009

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

1 голос
/ 21 марта 2009

Google Analytics Script - это именно то, что вам нужно. Поскольку сеанс будет открыт и для сканеров.

1 голос
/ 21 марта 2009

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

...