Реализация счетчика посетителей.
-
21-08-2019 - |
Вопрос
Я новичок и разрабатываю веб-сайт с использованием 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-адрес, используемый браузер, дату и время посещения, разрешение экрана и т. д. посетителей моих веб-сайтов.Как мне это сделать?
Жду предложений.
Лалит Кумар Барик
Решение
Аналитический скрипт Google – это именно то, что вам нужно.Поскольку сеанс будет открыт и для сканеров.
Другие советы
Для простой реализации вы можете использовать собственный HttpModule.Для каждого запроса к вашему приложению вы должны:
- Проверьте, содержит ли Request.Cookies файл cookie для отслеживания.
- Если файл cookie отслеживания не существует, возможно, это новый посетитель (или срок действия файла cookie истек — см. 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 (или какое-либо другое).
Используйте Google Analytics . Не пытайтесь не изобретать колесо, если а) колесо не делать то, что вы хотите, или б) вы просто пытаетесь выяснить, как работает колесо
Я могу только поддержать предложение Гарета использовать уже имеющийся анализ трафика.Если вам не нравится идея предоставлять Google данные о трафике вашего веб-сайта, вы также можете загрузить файлы журналов и проанализировать их с помощью одного из многих инструменты анализа файлов журналов веб-сервера доступный.