Большинству владельцев сайтов интересно узнать, какие страницы привлекают больше всего посетителей, и сколько посетителей заходит на сайт вообще за тот или иной промежуток времени.
В настоящее время существует множество готовых решений по сбору статистики посещаемости сайта, таких как Google Analytics, LiveInternet, Яндекс Метрика и другие. Но, при этом по-прежнему остаются актуальными вопросы, связанные с самостоятельным написанием подобных счётчиков.
В интернете есть множество материалов по написанию счётчиков посещений на PHP. Но, что делать владельцу сайта, который был написан на ASP.NET? К счастью, в ASP.NET также есть возможность написать счётчик посещений для сайта.
Для примера напишем простой счётчик, который учитывает следующие параметры:
- IP адрес пользователя;
- Тип браузера;
- Адрес страницы сайта, которую посетил данный пользователь;
- Время посещения страницы.
Чтобы получить сведения необходимо воспользоваться свойством страницы под названием Request, которое возвращает объект класса HttpRequest. С помощью этого свойства можно легко получить почти все необходимые данные.
1 2 3 |
string VistorHostAddress = Request.UserHostAddress; string VisitorUserAgent = Request.UserAgent; string VisitorPageUrl = Request.Url.ToString(); |
1 |
DateTime VisitTime = DateTime.Now; |
Создадим следующую таблицу:
Поле | Назначение |
id | Уникальный идентификатор записи (первичный ключ) |
IP | IP адрес |
UserAgent | Используемый браузер |
PageUrl | Адрес страницы |
VisitDate | Дата и время посещения страницы |
Рассмотрим работу с БД на примере MS SQL Server.
Для добавления новых записей удобнее всего использовать хранимые процедуры. Создадим процедуру для добавления записи о посетителе страницы.
1 2 3 4 5 6 7 8 9 10 11 |
CREATE PROCEDURE AddVisitor @Ip as nvarchar(20), @UserAgent as nvarchar(100), @PageUrl as nvarchar(100), @VisitDate as datetime AS BEGIN SET NOCOUNT ON; INSERT INTO dbo.Visitors (IP, UserAgent, PageUrl, VisitDate) VALUES (@Ip, @UserAgent, @PageUrl, @VisitDate); END GO |
Для работы с БД в .NET Framework есть два основных подхода: ADO.NET и LINQ (так как речь идёт о MS SQL Server, воспользуемся LINQ to SQL).
При использовании ADO.NET необходимо подключить пространства имён System.Data и System.Data.SqlClient, создать соединение с БД, сформировать команду на выполнение хранимой процедуры и после выполнить её.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//Создание соединения и команды на выполнение хранимой процедуры SqlConnection Con = new SqlConnection(@"Data Source=MPC\SQLS001;Initial Catalog=SiteVisitors;Persist Security Info=True;User ID=sa;Password=123"); SqlCommand Com = new SqlCommand("AddVisitor", Con); Com.CommandType = CommandType.StoredProcedure; //Передача значений параметров Com.Parameters.Clear(); Com.Parameters.Add("IP",SqlDbType.NVarChar,20); Com.Parameters["IP"].Value = Request.UserHostAddress; Com.Parameters.Add("UserAgent", SqlDbType.NVarChar, 100); Com.Parameters["UserAgent"].Value = Request.UserAgent; Com.Parameters.Add("PageUrl", SqlDbType.NVarChar, 100); Com.Parameters["PageUrl"].Value = Request.Url.ToString(); Com.Parameters.Add("VisitDate", SqlDbType.DateTime); Com.Parameters["VisitDate"].Value = DateTime.Now; //Выполнение хранимой процедуры Con.Open(); Com.ExecuteNonQuery(); Con.Close(); |
1 2 |
DataClassesDataContext dc = new DataClassesDataContext(); dc.AddVisitor(Request.UserHostAddress, Request.UserAgent, Request.Url.ToString(), DateTime.Now); |
Добавление в БД сведений о посетителе лучше всего выполнять прямо при загрузке страницы в методе Page_Load. Тогда информация о посетителе будет сразу же сохранена в БД.
Это даёт подобным счётчикам определённое преимущество перед готовыми решениями, так как последние используют JavaScript.
В этой статье рассмотрен пример создания на ASP.NET самого простого счётчика, который учитывает только самые основные показатели посещаемости. Поэтому, при желании вполне возможно написать счётчик с гораздо более широким функционалом.
Спасибо. Может быть что то не то, но у меня Request принимал только значения string.
Пожалуйста! Что касается Request, то это объект (свойство класса Controller), который представляет интерфейс для доступа к различным параметрам HTTP запроса и далеко не все из них имеют тип string. Например, тот же параметр URL, это объект класса Uri. Вероятно, Вы что-то не то пытались сделать. Но, что именно, так без кода сказать не могу.