Asp компонент page counter


Содержание

Пользовательские элементы управления

ASP.NET — Веб-сайты ASP.NET — Пользовательские элементы управления

Базовый набор элементов управления ASP.NET обширен и внушителен. Он охватывает элементы управления, которые включают в себя базовые HTML-дескрипторы, и элементы управления, предоставляющие развитую высокоуровневую модель, такие как Calendar, TreeView и элементы управления данными. Конечно, даже самый лучший набор элементов управления не в состоянии удовлетворить нужды всех разработчиков. Рано или поздно придется заняться созданием собственных компонентов пользовательского интерфейса.

Платформа .NET допускает два способа включения собственных элементов управления в структуру веб-форм. Можно разработать следующие компоненты:

Пользовательские элементы управления

Пользовательский элемент управления — небольшая часть страницы, которая может содержать статический HTML-код и элементы управления веб-сервера. Преимущество пользовательских элементов управления заключается в том, что после того как какой-то элемент создан, его можно повторно использовать в нескольких страницах одного веб-приложения. В него даже можно добавлять собственные свойства, события и методы.

Специальные серверные элементы управления

Специальные серверные элементы управления охватывают классы, которые программно генерируют собственную HTML-разметку. В отличие от пользовательских элементов управления (подобно страницам веб-форм объявляемых в простом текстовом файле), серверные элементы управления всегда предварительно компилируются в DLL-сборки. В зависимости от способа формирования кода серверного элемента управления, визуализация содержимого может выполняться с нуля, за счет наследования внешнего вида и поведения существующего веб-элемента управления и расширения его функциональности либо путем построения интерфейса за счет создания экземпляров и конфигурирования группы составляющих элементов управления.

В этой статье мы исследуем первую возможность — применение пользовательских элементов управления. Пользовательские элементы управления служат прекрасным средством стандартизации повторяющегося содержимого во всех страницах веб-сайта. Например, предположим, что пользователям нужно предоставить единообразный способ ввода адресной информации на нескольких различных страницах. Для решения этой задачи можно было бы создать пользовательский элемент управления адресом, объединяющий текстовые поля и несколько связанных с ними функций проверки. Затем этот элемент управления адреса можно было вставлять в любую веб-форму и программно работать с ним как с единым объектом.

Пользовательские элементы управления хорошо подходят также для построения и многократного использования верхних и нижних колонтитулов сайтов и навигационных средств.

Основы пользовательских элементов управления

Файлы пользовательских элементов управления (.ascx) подобны файлам веб-форм ASP.NET (.aspx). Как и веб-формы, пользовательские элементы управления состоят из интерфейса пользователя с дескрипторами элементов управления (файл .ascx) и могут применять встроенные сценарии или файлы отделенного кода (.cs). Пользовательские элементы управления могут содержать практически все компоненты, присущие веб-странице, включая статическое HTML-содержимое и элементы управления ASP.NET, и получают те же события, что и объект Page (наподобие Load и PreRender), и посредством свойств (таких как Application, Session, Request и Response) отображают тот же набор объектов, присущих ASP.NET.

Ниже перечислены основные различия между пользовательскими элементами управления и веб-страницами:

Пользовательские элементы управления начинаются с директивы Control, а не Page.

Пользовательские элементы управления используют расширение .ascx, а не .aspx, а их файлы отделенного кода наследуются от класса System.Web.UI.UserControl. Фактически классы UserControl и Page унаследованы от одного и того же класса TemplateControl, что обусловливает общность многих их методов и свойств.

Пользовательские элементы управления не могут запрашиваться непосредственно клиентским браузером. (При любой подобной попытке ASP.NET будет выводить обобщенное сообщение об ошибке «that file type is not served» («необслуживаемый тип файла»). Взамен пользовательские элементы управления внедряются в другие веб-страницы.

Создание простого пользовательского элемента управления

Чтобы создать пользовательский элемент управления в Visual Studio, выберите команду меню Website Add New Item (Веб-сайт Добавить новый элемент), а затем укажите шаблон Web User Control (Пользовательский веб-элемент управления).

Ниже приведен код простейшего пользовательского элемента управления — элемента, содержащего только статическую HTML-разметку. Этот элемент управления представляет строку верхнего колонтитула:

Обратите внимание, что директива Control идентифицирует класс отделенного кода. Однако для работы простой элемент управления типа верхнего колонтитула не нуждается ни в каком специальном коде, поэтому данный класс можно оставить пустым:

Как и веб-формы ASP.NET, пользовательский элемент управления является частичным классом, поскольку он объединяется с отдельной частью, генерируемой ASP.NET. Эта автоматически генерируемая часть обладает переменными-членами для всех элементов управления, добавляемых во время проектирования.

Теперь, чтобы протестировать элемент управления, его нужно поместить в веб-форму. Вначале с помощью директивы Register, которую можно поместить непосредственно за директивой Page, странице ASP.NET необходимо указать, что мы планируем использовать этот пользовательский элемент управления:

Эта строка с помощью атрибута Src идентифицирует исходный файл, содержащий пользовательский элемент управления. Она определяет также префикс (TagPrefix) и имя (TagName) дескриптора, который будет использоваться для объявления нового элемента управления на странице.

При добавлении пользовательского элемента управления на страницу, как минимум, ему нужно назначить уникальный идентификатор и указать, что он выполняется на сервере, подобно всем элементам управления ASP.NET. Пример страницы с пользовательским верхним колонтитулом приведен на рисунке ниже:

В среде Visual Studio директиву Register создавать вручную не понадобится. Вместо этого, как только пользовательский элемент управления будет создан, можно просто выбрать файл .ascx в окне Solution Explorer (Проводник решений) и перетащить его на поверхность проектирования веб-формы (но не в окно представления исходного кода). Visual Studio автоматически добавит директиву Register и экземпляр дескриптора пользовательского элемента управления.

Верхний колонтитул — пример простейшего пользовательского элемента управления, но даже он может предоставить ряд реальных преимуществ. Подумайте, насколько трудоемким оказался бы процесс, если бы пришлось вручную копировать HTML-разметку верхнего колонтитула во все свои страницы ASP.NET, а затем изменять заголовок, добавлять ссылки контактов или какие-то другие элементы. Понадобилось бы изменить и заново загрузить на сервер все эти страницы. Располагая отдельным пользовательским элементом управления, достаточно обновить только один этот файл. Но, самое главное, в веб-форме ASP.NET можно использовать любую комбинацию HTML-разметки, пользовательских и серверных элементов управления.

Преобразование страницы в пользовательский элемент управления

Иногда при разработке пользовательского элемента управления проще всего вначале поместить его на веб-страницу, протестировать ее, а затем преобразовать в пользовательский элемент управления. Даже при отказе от этого подхода, в конечном счете, может оказаться, что часть интерфейса пользователя нужно извлечь из страницы и задействовать в нескольких местах.

В целом этот процесс сводится к вырезанию и вставке. Однако при этом следует уделить внимание нескольким моментам:

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

При наличии директивы Page замените ее директивой Control и удалите все атрибуты, не поддерживаемые директивой Control, такие как AspCompat, Buffer, ClientTarget, CodePage, Culture, EnableSessionState, EnableViewStateMac, ErrorPage, LCID, ResponseEncoding, Trace, TraceMode и Transaction.

Если модель отделенного кода не используется, удостоверьтесь, что имя класса включено в директиву Control посредством атрибута ClassName. Благодаря этому веб-страница, использующая данный элемент управления, может быть строго типизированной, что позволит ей получать доступ к свойствам и методам, добавленным в элемент управления. В случае применения модели отделенного кода класс отделенного кода нужно изменить так, чтобы он наследовался от класса UserControl, а не Page.

Измените расширение файла с .aspx на .ascx.

Asp компонент page counter

LISTING 15.6 Sample Content Schedule File ( ch15ContentScheduleFile.txt )

The Content Rotator component exposes one public object, the MSWC.ContentRotator object. The ContentRotator object has only two methods: ChooseContent and GetAllContent . Both methods accept the name of a Content Schedule file as an argument. You can only use virtual filenames, but those can be relative filenames. The ChooseContent method returns a single string that is selected from among all the available strings based on the weight value. The GetAllContent method returns all the strings. To use the Content Rotator component, create an instance of a MSWC.ContentRotator object and write the results of the ChooseContent method to the browser. For example:


The Counters Component

The Counters component is a simple counter you can add to your applications. The component writes persistent integer values to disk in the counters.txt file—located in the same directory as the counters.dll file (typically, c:\winnt\system32\inetsrv\data ). You create one Counters component in global.asa for your entire site. That component then supports any number of individual counter values. Create the counter at Application scope using the

The Counters component has four methods. Each method accepts a single string argument containing the name of a counter value. Table15.3 lists the Counters component methods.

TABLE 15.3: Counters Component Methods
Method/Property Description
Get (counterName) Returns the value of the counter.
Increment (counterName) Increases the counter by 1.
Remove (counterName) Removes the counter from the counters.txt file.
Set (counterName) Sets the value of the counter to a specific integer.

To create a new counter value, you provide a unique name. For example, you can use the Counters component to count page hits for your entire site. On each page, you increment the counter for that page. I’ve included two example pages on the CD, the files ch15i5a.asp and ch15i5b.asp . Listing 15.7 shows the contents of ch15i5a.asp .

LISTING 15.7 Counters Component Example ( ch15i5a.asp )

The Logging Utility

The Logging Utility lets you read IIS log files. This capability is useful for reports of many types; in fact, it’s so important that an entire industry, called clickstream analysis, is growing up around the idea that Web server log files contain invaluable business data. For example, by closely analyzing users’ paths through a Web site, you might be able to tell which products or techniques are most attractive to customers. When you make changes to a site, before-and-after log file analysis can help you determine whether those changes provide an expected return on investment. The Logging Utility, by itself, doesn’t provide any analytical capabilities, but it does give you automated access to the log file format. You can create your own analysis code.

To use the Logging Utility, you must be an authenticated Administrator or Operator on the NT or Windows 2000 system hosting IIS. In other words, you will never be able to use the Logging Utility component unless you disable Anonymous Access to the ASP pages that instantiate the component. I’ll repeat that, slightly louder.

You may only use the Logging Utility if you are an authenticated Administrator or Operator on the NT or Windows 2000 system hosting IIS. You will never be able to use the Logging Utility component unless you disable Anonymous Access to the ASP pages that instantiate the component.

To force a user to authenticate for one or more pages, check the Request.ServerVariables(“LOGON_USER”) variable. If the value is a null string, set the Response.Status to 401 Unauthorized and stop processing the page. For example:

When your ASP page responds to an anonymous request with a 401 Unauthorized status, IIS checks the virtual directory settings and sends a header listing the types of authentication it will accept, either Basic Authentication, NT Challenge/Response, or both.

Use of this site is subject to certain Terms & Conditions , Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction in whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb’s privacy statement.

Настройка прав доступа к папке на сервере

Господа помоги со скриптами
При создании счетчика на ASP — счетчик пишет в папку с тестовым файлом count.txt — как настроить права доступа этой папки на сервере??
Если можно дайте рекомендации для IIS
Как я понял нужно дать доступ для папки
R — Read :W -это Write; Е — execute
А как обстоит дело с безопасностью? Это не нарушит безопасность, если давать в каталог возможность записи? И как поставить счетчик на страницу default.htm или надо делать обязательно переадресацию на страницу asp?

16.04.2007, 18:32

Проверка прав доступа к папке
Прошу помощи. Необходимо в указаном пути перебрать папки на доступ к ней юзера. string abc; .

Проверка прав доступа к папке (диску).
Меня интересует такой вопрос, как можно проверить возможно ли создать файл в папке. Можно конечно.

Назначение папке прав доступа для всех
Доброе время суток, написал програму и теперь написал к ней установщик. Инсталятор запускается с.

Настройка прав доступа к файлу в системной папке через групповые политики
Доброго дня! Подскажите, пожалуйста, как с помощью GPO настроить доступ к файлу в директории.

Нет прав доступа к сетевой папке
Два компьютера с windows xp sp3 в локалке На одном компьютере расшарено 2 папки. С другого.

17.04.2007, 07:12 2

а сам ты как думаеш на тему безопасности ставя чуть ли не полный доступ на каталог? :-))

у меня счетчик с табличкой акцессовской работает через ODBC, могеш и ты извратиться и завязаться со своим текстовым файликом :-)))

а насчет переадресации — то естественно, только если взялся строить на ASP, зачем тебе default.htm ?? пиши default.asp :-)

17.04.2007, 11:26 3 17.04.2007, 16:43 [ТС] 4

Спасибо всем кто откликнулся и нашел время ответить мне. Кстати тот же вопрос я поставил на activeserverpages.ru — и ответа до сих пор нет. Наверное никто туда не ходит.

Так вот вернемся к теме вопроса. Я согласен с тем, что можно сделать на ODBS, но это же не рационально открывать целую базу данных из-за одного счетчика. Да и вообще — ведь для чего-то существует эта функция записи данных в файл. И еще одно — в основном все счетчики написаны так, что они работают с файлами — так сделано и на Perl. И в сети полно таким счетчиков.
Так вот вопрос все-же остался — как-же ОБЕСПЕЧИТЬ БЕЗОПАСНОСТЬ при работе с текстовым файлом?

Кто знает отзовитесь.

17.04.2007, 16:43
17.04.2007, 17:07 5
17.04.2007, 19:50 6

Попробуй такой вариант
В NTFS права CHANGE на все для анонимуса
а вот в IIS ADMIN на папке где файл тока поставь выполнять скрипты.
Проверь и скажи сюда работает ли ? :-)

Согласен — что ради подсчитывания тока кол-ва обращений использовать базу — это слишком. Вот если еще хочешь хранить и параметры клиента (REMOTE_ADDR,REMOTE_USER и т.д) то конечно здесь лучше в базу — легче потом анализировать.

Есть вариант счетчика от мелкософт:


Count Page Hits
It is important to know how many hits your Web pages get. This data helps determine how changes to your Web site may affect your customers’ viewing habits. More importantly, it provides useful insight as to how customers are navigating through your site and where ads should be placed. Sites with high trafficking have higher advertisement prices associated with them. The data gathered from a page hit counter provides you with trafficking information to begin negotiating advertisement prices for your Web pages.

The Page Counter component uses an internal object to record page hit-count totals for all pages on the server. At regular intervals, this object saves all information to a text file so that no counts are lost due to power loss or system failure. The Page Counter component uses the following three methods:

Hits(). This displays the number of hits for a Web page. The default is the current page.

PageHit(). This increments the hit count for the current page.

Reset(). This resets the hit count for a page to zero. The default is the current page.
An in-use sample of this script can be seen at the bottom of the Displayad.asp script. To place a page hit counter on a Web page, place the following script where you want the counter displayed on the page:

You are visitor number to this Web site

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

Предположим, перед нами стоит задача создания газетного сайта, причем некоторые из его читателей должны иметь право пополнять его новыми статьями, снабжаемыми фотографиями непосредственно с самого сайта и без программирования. Предположим также, что такой сайт должен иметь возможности удаления статей, их поиска, а также сортировки. С первого взгляда может показаться, что решение такой задачи не под силу начинающему программисту ASP, однако, как вы скоро увидите, это далеко не так.

Для начала давайте все-таки разберемся, что же от нас требуется. По сути, необходимо создать базу данных всех статей, подготовить несколько HTML-форм для загрузки статей на сервер, их поиска, сортировки, удаления и, наконец, отображения результата.

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

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».

Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных системы, для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

В результате в списке источников данных в вашей системе появится строка, представленная на рис. 3.

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

Она по сути формирует ссылку на файл, содержащий шаблон отображения самой статьи, причем передает идентификатор статьи ему в качестве параметра. Полностью файл шаблона приведен в приложении к настоящей статье, а механизм его работы может быть кратко представлен следующим образом:

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

Для полноценной работы нам необходимо познакомиться с четырьмя операторами этого мощного языка, предназначенного специально для работы с базами данных.

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.


Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).

INSERT используется для добавления новых записей в существующую таблицу. Допустимо две формы использования INSERT.

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

REPLACE служит для редактирования содержимого таблицы и работает в точности как INSERT, за исключением того, что если старая запись в таблице имеет то же значение, что и записываемая, то старая запись удаляется прежде, чем добавляется новая.

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa

Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)

Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

  • на загрузку статьи с сайта должен иметь право не каждый (следовательно, желательно предусмотреть пароль для доступа к этой функции);
  • у каждой статьи есть определенная тема (рубрика), причем она не может быть произвольной, а должна выбираться из списка;
  • список можно хранить непосредственно в HTML-файле и, каждый раз изменяя его, изменять сам файл. Это самый простой и быстрый способ;
  • однако для того, чтобы позволить динамически изменять и пополнять этот список, рекомендуется держать его в базе данных. Это позволит пользователям произвольным образом изменять его содержимое и не потребует переделки формы. Для простоты сначала рассмотрим вариант со встроенным («жестко прошитым») рубрикатором.

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?

Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

И еще. Прежде чем приступить к выполнению нашей задачи, следует сказать еще об одной небольшой проблеме: когда мы будем вставлять в ячейку базы данных текст, его форматирование (даже самое простое) не сохранится, и в дальнейшем его невозможно будет корректно отобразить на HTML-странице, поскольку поле Memo хранит неформатированную строку текста. Чтобы избежать этого, следует написать функцию, которая позволит производить примитивное HTML-форматирование введенного текста статьи, перед тем как записать его в базу данных. Другими словами, в самом примитивном случае (хотя бы для того, чтобы сохранить исходную разбивку на строки) функция должна вставлять символы конца строки там, где во входном потоке имеются символы переноса строк.

Удаляем статью (RemoveForm.asp и Rem.asp)

Было бы неплохо предусмотреть возможность удаления статьи с нашего сайта: во-первых, она может устареть, а во-вторых, в процессе ее подготовки не исключены ошибки или опечатки. Останавливаться на форме удаления статьи не будем, скажем лишь, что она содержит единственные элементы с запросом пароля и кнопкой удаления (см. файл RemoveForm.asp), и сразу перейдем к рассмотрению непосредственно процесса удаления:

Особое внимание следует уделить первым двум строкам. Они получают значение глобальной переменной текущего сеанса (сессии) работы со значением идентификатора текущей статьи (в нашем случае удаляемой), которая была инициализирована (файл ArtTmp.htm) следующей строкой:

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

Напоследок хотелось бы сориентировать разработчиков ASP-страниц в мире документации и инструментальных средств. Дело в том, что автор настоящей статьи провел не один день сидя в Интернете в поисках всевозможных исходных текстов, документации, инструментальных средств и теоретических основ этого мощного средства.


Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

Среди огромного числа сайтов мною были отобраны те, посещение которых было для меня особенно полезным и с которыми хотелось ознакомить читателей, а именно:

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

ASP.NET 5 Middleware или куда же пропал мой HTTP модуль?

Новая версия ASP.NET 5 переписана почти с нуля и включает в себя существенные изменения по сравнению с предыдущими версиями. Одно из самых больших изменений — это конвейер обработки (HTTP Pipeline). В этой статье описано, как эти изменения влияют на проектирование и внедрение компонентов, которые раньше были представлены как Http модули.

Поведение HTTP модулей раньше было схожим с поведением фильтров запросов, вплоть до ASP.NET 5. Это функционал, который можно внедрить в конвейер запросов и описать некоторую задачу для выполнения, например, отреагировать на событие в приложении. Модули используют для аутентификации, глобальной обработки ошибок и логгирования. Также их часто используют для перехвата и изменения серверного ответа, например, удаления пробелов или компрессии. Они реализуют интерфейс IHttpModule, который определен в сборке System.Web, которая, в свою очередь, не является частью нового ASP.NET.

В основном регистрация HttpModule-я в коде добавляется как обработчик события в Global.asax или же создается сборка для регистрации в web.config.

Что такое Middleware?

Определение «Middleware» сильно варьируется, но в контексте ASP.NET 5, пожалуй, самое точное определение дано в спецификации Owin:

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

Оригинал:
Pass through components that form a pipeline between a server and application to inspect, route, or modify request and response messages for a specific purpose

Очень похоже на описание традиционного HTTP модуля или обработчика (handler-a).

Доступ к конвейеру запросов в приложении ASP.NET 5 предоставляется в классе Startup (файл Startup.cs), он же является точкой входа в само приложение. Класс Startup включает в себя метод Configure, который принимает IApplicationBuilder в качестве параметра. Интерфейс IApplicationBuilder (параметр app) предоставляет ряд extension-методов, с помощью которых различные компоненты могут быть подключены к конвейеру запросов. Основное различие между этой и предыдущей реализацией HTTP конвейера является то, что прежний подход базировался на событиях, а сейчас он был заменен на композитную модель (компоненты добавляются один за другим). Также, в новом ASP.NET важен порядок, в котором добавляют эти компоненты. В базовом шаблоне приложения MVC уже имеются некоторые компоненты, и по комментариям можно понять их назначение:

Как мы видим, методы, с помощью которых добавлены Identity, MVC и статические файлы — extension-методы IApplicationBuilder. При добавлении нового промежуточного обработчика, который будет описан в этой статье, я также создам extension-метод для добавления его к конвейеру.

Пример Middleware

Наш пример промежуточного обработчика будет делать 2 вещи: измерять время обработки запроса, а также добавлять это значения в исходящий HTML и заголовки ответа. Это даже целые 3 вещи. В любом случае, этот пример будет иллюстрировать 2 самых распространенных сценария, что описаны во множестве статей типа «Как написать свой HTTP модуль» — изменение ответа сервера и добавление заголовков. Код обработчика:

У нас есть приватное поле типа RequestDelegate, в котором хранится делегат, что передан конструктору. Сам тип RequestDelegate инкапсулирует метод, которые принимает HttpContext и возвращает Task:

Объект HttpContext похож на такой же из предыдущих версий ASP.NET тем, что он обеспечивает доступ к запросу, ответа и т.д., но это — совсем другой зверь и он намного легче.

В ASP.NET 5 middleware это экземпляр Func — делегат, который принимает RequestDelegate в качестве параметра и возвращает RequestDelegate. И, как описано выше, RequestDelegate — это функция, которая возвращает функцию, и это принцип, по которому построен конвейер обработки — каждая часть промежуточного слоя, будучи прикованной к другой части, отвечает за передачу на обработку следующему в цепи (при необходимости).

Метод Invoke будет вызываться во время выполнения, базируясь на основе конвенции. Это и есть место, где происходит обработка в вашей части middleware, и место, где вы отдаете контроль следующему компоненту в конвейере в случае необходимости. Возможен случай, когда не нужно передавать контроль дальше, а вместо этого нужно остановить выполнение, например, если это компонент аутентификации, который определяет, что текущий пользователь не имеет соответствующих прав. Управление передается следующему компоненту путем вызова await _next(context). Код, который вы размещаете до этого и будет выполняется, например, в нашем случае, мы создаем секундомер и запускаем его. Кроме того, у нас есть доступ к ответу, который реализуется в виде потока данных (stream). Затем вызывается следующий компонент, который, в свою очередь, вызывает следующий и так далее. Затем управление передается обратно по цепочке компонентов и выполняется код, который был добавлен после вызова await _next(context). Именно в этом блоке кода в нашем примере и изменяется тело ответа, чтобы включить HTML с истекшим временем в footer страницы. И тогда же добавляется заголовок с этим же значением.

Вклинивание в конвейер

Следующий шаг — это включить компонент в конвейер обработки. Как было описано выше, это можно сделать с помощью extesion-метода, например:

Это простой пример обёртки вокруг стандартного метода UseMiddleware, который сейчас можно найти в Microsoft.AspNet.Builder.
Ну, и последний шаг — вызов нашего метода в классе Startup.

При первом запуске сайта уходит довольно много времени — почти 2 секунды, что можно увидеть внизу страницы:

Ну, и с помощью, например, Developer Tools в Chrome можно посмотреть заголовки:

Asp компонент page counter

В прошлых темах все классы компонентов представлений в качестве выходного результата использовали строку, то есть объект string. Однако такой тип для генерации результата не всегда является удобным, и как правило в качестве результата в View Component используется объект интерфейса IViewComponentResult . Имеется три встроенных класса, которые реализуют этот интерфейс:


ViewViewComponentResult : используется для генерации представления Razor с возможностью передачи модели. Для создания этого объекта может применяться метод View() класса ViewComponent

ContentViewComponentResult : применяется для отправки текстового контента. Для создания объекта используется метод Content()

HtmlContentViewComponentResult : представляет фрагмент кода HTML, который инкорпорируется в веб-станицу

ContentViewComponentResult

Для возврата содержимого в виде обычной строки используется объект ContentViewComponentResult . Для его создания применяется метод Content() , который в качестве параметра принимает строку.

В предыдущих темах метод Invoke компонента возвращал строку — объект string. По сути же возвращался тот же объект ContentViewComponentResult, так как фреймворк MVC автоматически преобразовывает строку в ContentViewComponentResult. Например:

При вызове компонента:

мы бы увидели в браузере ту же самую строку:

HTML-фрагменты

Для генерации html-фрагментов, которые вставляются в основное представление, применяется класс HtmlContentViewComponentResult . Для создания html-содержимого в конструктор этого класса передается объект HtmlString с кодом html:

В отличие от ContentViewComponentResult все html-теги будут должным образом интерпретироваться:

Build a realtime counter using ASP.NET

September 6th, 2020

It is common practice on websites and applications to make viewers aware of how many others have interacted with the same content e.g. YouTube videos. The practice of displaying this information emphasizes the relevance of the resource and draws more attention to it.

In this tutorial, we will emulate this practice by displaying the number of visits to a single page website. We will use C Sharp, C# for short, as our server-side language with ASP.NET MVC to build our webpage and Pusher to provide realtime updates of the page visits.

Let’s get started!

Building the frontend for our realtime counter in .NET

First, let’s start up Visual Studio

For this tutorial, we’ll be using Visual Studio. It’s an IDE that makes ASP.NET development easier and quicker. Visual Studio 2020 is free and available for the popularly used Operating Systems. You can find installation details here.

Creating our new project

We’ll start a new project by clicking New Project on the Visual Studio dashboard. Following the GUI prompts (in this order) we:

  • Set C# as the language to use
  • Select ASP.NET MVC Project as the template
  • Include a Unit Test Project (this is optional and can be unticked)
  • Fill in the Project name e.g. Notif (any name would do)
  • Fill in the Solution name i.e. application name (again any name would do)
  • Select the version control options to include git to the project

And then click Create.

The project gets created with a default HomeController.cs . This is the HomeController class file. For the purpose of this tutorial, being a single page website, this single Controller class will be enough.

�� ASP.NET MVC routes follow the pattern of // i.e assuming our HomeController.cs has a method named Index the route would be viewdotnet.com/Home/Index. ASP.NET MVC provides Home as the default controller name and Index as the default action name so that a route ‘/’ i.e. viewdotnet.com/ maps to the Index method in the Home controller.

In our HomeController.cs we’ll have

ActionResult is the return type of the method which specifies that it will return an action in the form of rendering a view, serving a streamed file, etc. ViewData is used to pass data from the method to the HTML file (our view file) that will be rendered. View() creates a view response which we return. Note that **Mono** is only available on a Mac OS machine.

�� In ASP.NET MVC the views (html files) rendered by a Controller Class must exist in the View folder and either under the Shared folder or the Folder bearing the name of the Controller. i.e. for the HomeController views must be in either Views/Home/*«.cshtml or Views/Shared/*«.cshtml .

Also when the view is unspecified in the View function it defaults to index.cshtml ; these views extend _Layout.cshtml found in the Shared folder.

Create the single web page

To achieve a quick and simple web page for our visitors to view we’ll be using Bootstrap.

We’ve used CDNs to include to Bootstrap CSS and JS files and also the jQuery JS file (it is needed for Bootstrap JS).

@ViewBag is another means of passing data to the view file from the controller @RenderBody is where our actual view index.cshtml will be inserted in this base view


Our page has a header and a big image (pretty minimal stuff)

Keeping track of views

Now we’ll write the code to display the number of visitors to our page. We’ll need our code:

  • To recognize a visit
  • To store the visits so far (adding to this stored value every time someone visits)
  • To pass the data (number of visitors) to our view to display

In our HomeController.cs we’ll add the code to retrieve the visits so far, increment it and pass it on to the view. To keep things light and simple, we’ll be using file storage as our store (i.e. reading and writing the number of visits to a file such as visitors.txt).

We create a visitors variable and initialize it to 0. Then we check if the visitors.txt file exists, if it does then we’ve been visited in the past and we read the content into the visitors variable. Next, we increment the value of visitors by 1 (the visitor we are currently serving) and save the new value back into our file.

�� To check if a file exists, read, and write into it, we’ll use the File class (available from ASP.NET) which is a member of the System.IO namespace so at the top of our class file we’ve added using System.IO;

Now that we have the number of visitors in a variable, we’ll pass it on to our view using ViewData. We’ve also added some supporting text based on the value of the visitors variable to improve readability. In our view file we’ll add some markup to display the visitors value and text we’re passing along.

Now our page will look like:

Adding realtime updates to our views counter with Pusher

While a user views our page we’d like them to know when more people visit the page by increasing the number of views without requiring a refresh. We will be using Pusher for this.

To start with, lets head over to the pusher dashboard and create an app. You can register for free if you haven’t got an account. Fill out the create app form with the information requested.

To make our app realtime, we’ll make each visit trigger an event via Pusher on the server-side (i.e. backend) and have Pusher listen and react to that event on the client-side (i.e. view using JavaScript).

Triggering event on the server-side

In our HomeController.cs , on every new visit using Pusher we’ll trigger a newVisit event on a channel we’ll call general which will broadcast the current number of visits.

To do this, we’ll install Pusher via NuGet — *a packer manager for ASP.NET *- by:

  • Right clicking the *Packages* folder in our solution
  • Selecting Add Packages and;
  • Searching and selecting Pusher Server

Next, we’ll initialize Pusher in our Controller using and trigger our newVisit event.

�� After Installing the PusherServer package we use it in our controller by adding using PusherServer at the top of our class definition.

After initializing Pusher using our PUSHER_APP_ID, PUSHER_APP_KEY, **PUSHER_APP_SECRET and PUSHER_APP_CLUSTER (be sure to replace these with the actual values from your dashboard), we will broadcast an object consisting of the number of visitors and the visitors supporting text with our pusher instance on the newVisit event via the general channel.

Listening for the event on our client-side

To react to our newVisit event and its corresponding data we’ll be using JavaScript and JQuery for DOM manipulation to display the event data.

In the above code, we:

  • Add the pusher library to our view via a CDN,
  • Initialize Pusher passing in our PUSHER_APP_KEY,
  • Subscribe to the general channel
  • Bind the channel to the newVisit event also attaching a callback function to the binding.

In our callback function we retrieve the visits and message data, then using jQuery pass it into our markup.

Now we run our application by clicking the play button in the top left corner of our IDE and here’s a glimpse of our resulting webpage.

Asp компонент page counter

Этот текст предназначен для тех, кто никогда не имел дела с ASP, и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу, создать у читателя общее представление о предмете. Отдельные неточности при этом менее важны, пожалуйста, громко не ругайтесь.

ASP (Active Server Pages) – это мощная технология от Microsoft, позволяющая легко разрабатывать приложения для WWW. ASP работает на платформе Windows NT и IIS (Internet Information Server), начиная с версии 3, хотя вроде есть реализации на других платформах. ASP – это не язык программирования, это внутренняя технология, позволяющая подключать программы к Web-страницам. Основа успеха ASP – простой скриптовый язык (Visual Basic Script или Java Script) и возможность использования внешних COM-компонент.

Как это все происходит?

Вы пишите программу и складываете в файл на сервере. Браузер клиента запрашивает файл. Файл сначала интерпретируется сервером, на выходе производится HTML-код. Этот HTML посылается клиенту. Файлы с программами имеют расширение .asp. Файлы asp – это обычные текстовые файлы, содержащие исходные тексты программ. Файлы делаются с помощью любого текстового редактора. Каталог, в котором размещены файлы asp должен иметь права на выполнение, так как сервер исполняет эти файлы, когда браузер их запрашивает. Собственно программы пишутся на любом скриптовом языке, который установлен в системе. По умолчанию поддерживаются VBScript и JavaScript. Можно доустановить другие (например, Perl). Если ничего специально не указывать используется VBScript. В дальнейшем будем ссылаться только на него. Программные фрагменты заключаются в скобки . Можно ставить открывающую скобку в начале файла, закрывающую – в конце, все что между ними – программа на Visual Basic’е.

Какие средства есть для программирования?


Web – нормальная среда программирования, если правильно понять, что есть что. В VBScript есть все нормальные конструкции структурного программирования (if, while, case, etc). Есть переменные (описывать не обязательно, тип явно не задается). Поддерживаются объекты. Работа с ними обычная – Object.Property, Object.Method. Есть ряд встроенных объектов (Request, Response, Session, Server, Connection, Recordset). Можно доустанавливать другие компоненты (скачивать, покупать, программировать), например для работы с электронной почтой.

Понятия «экран», куда можно выводить данные нет. Все, что надо показать пользователю, выбрасывается в выходной поток на языке HTML. Браузер пользователя интерпретирует этот HTML. Для упрощения вывода существует объект Response. Вывод осуществляется с помощью метода Write.

Hello, world!

Так производится запись во внутренний буфер объекта Response. Когда скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает «чистый» HTML, таким образом программы на ASP не зависят от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.

Программа на ASP не может явно спросить пользователя о чем-то. Она получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request. Чтобы передать переменную var в программу test.asp, надо написать:

Чтобы из программы получить значение этой переменной, надо написать:

Asp компонент page counter

How To Use Cookies in an ASP Page is a tutorial through which users can get detailed description about using the cookies to store and access the visitors information from a cookie on the client system in a step by step method. In this article author describes about various functions and statements that can be utilized in storing the site visitors information from the ASP page.

My ASP Page Lock is an easy and fast way to restrict access to any page in your site. Completely idiot proof, you should have no trouble installing and using it within a matter of minutes. Uses only one password, no database required. Securely.

This is a text based page counter script that uses SSI. The counter text can be displayed in plain text or you can even have a table around the counter text. This is a built in feature of this script. The program will count visitors to a single.

Tizag PHP Page Counter is an efficient online PHP counter independent of MySQL database. You can use this program to calculate your websites webtraffic and to claculate the total hits for your website pages. You can easily install this PHP.

Two Ways To Protect Your ASP Page an ASP tutorial that deals with securing the ASP pages with the help of two ways that the author offers for the users by using Request.Server variables. Here there are codes that has to be copied and pasted on the.

This is an efficient tutorial for the web developers on which they should really gather the details about how to create a small and efficient page counter to get information about the site visitors. This is an useful and helpful tool for every.

This is an ASP based web counter component which is used on the website to monitor the websites traffic and shows the tracked reports in graphical mode. It represents the statistical report as graph bar or as pie chart. It displays the reports.

Web Page Hit Counter is a web page counter that keeps track of all the hits on all the pages of your site. It uses a central database to keep track of all pages on the server. This script requires SSI to be installed on your server.

This is an ASP based networking component that allows web users to search for registrant name for the given domain name. It retrieves those data like, registrant name, their address and email address from whois server. This whois lookup will.

This ASP guide provides more information on declaring variables on ASP applications. It instructs you that if variables are given all over the ASP page, it would cause problem. And suggests you to declare the variables either at the top or end of.

This is an ASP based network component that allows network administrators or any web users who want to send and access web pages or document of HTTP via global network or through local network. It also allows them to use custom HTTP headers and.

Easy to use, ASP file upload component with progress bar indicator. Upload multiple files with size up to 2GB.

A web based ASP course that clearly explains how the arrays in the ASP form page can be sent to another ASP page. Instead of using session variables here it is described to use querystring to pass strings and number arrays. And the given ASP.

AdvZip is an ASP based compression component that provides all the functionalties for zipping and unzipping the files for all applications. This component provides various features like compressing and decompressing the files and folder, to add a.

A web page counter that tracks page names and views. Features fully automated page counting and easy installation and admin.

Free Page Counter — Counts Multiple Pages — Real Time Hits Display — Easy Copy & Paste into HTML Code — Graphic & Hidden Version — Cool Flash Interface

This is an ASP.NET based component and it is an useful database tool for the users that allows them to repair the data which have error on MS Access database records. It has password protection facility for full security. Users can easily extract.

This is a tutorial that contributes to web developers on the execution of a program on their servers from a remote location. Author details on creating an ASP page that allows users to go anywhere in the world and still be able to execute a.

This is an essential online tutorial for the web developers through which they can follow several steps provided in this tutorial for generating a simple page counter. It also instructs them about how to store page hit records with MS page counter.

This is an ASP based network component which is used to send for DNS lookups and for traceroute. DNS lookup is used to lookup hostname using IP address and to lookup IP address using host name. Traceroute is used to deliver ICMP request to the.

All files and free downloads are copyright of their respective owners. We do not provide any hacked, cracked, illegal, pirated version of scripts, codes, components downloads. All files are downloaded from the publishers website, our file servers or download mirrors. Always Virus check files downloaded from the web specially zip, rar, exe, trial, full versions etc. Download links from rapidshare, depositfiles, megaupload etc not published.

ASP. Основы. Объекты и компоненты. Доступ к базам данных

Dynamic HTML представляет собой основное средство программирования клиента для Microsoft Internet Explorer 4.0 и выше, но такие программы просмотра Web, как Netscape Navigator, не поддерживают Dynamic HTML. На самом деле очень малая часть функциональности клиентской части, поддерживаемой различными программами просмотра, может рассматриваться как действительно кросс-платформенная.

Если Вы хотите разработать Интернет-узел, открытый для доступа самым различным программам просмотра, то должны перенести программирование с клиента на сервер. Такую возможность предоставляют Microsoft ASP (Active Server Pages — активные серверные страницы). По сути ASP не что иное, как сценарий на VBScript, который исполняется на сервере. Когда запрашивается страница, этот сценарий порождает HTML-текст. Это ключевая особенность ASP — клиент никогда не видит вашего кода, а только результирующий HTML, который воспринимает любая программа просмотра.

Листинг 4.1 демонстрирует простую ASP-страницу, которая создает приветствие в соответствии со временем суток. В нем текущий час определяется при помощи кода Hour(Now), где Now — функция VBScript, возвращающая текущий момент времени и дату. Если текущий час меньше 12, то приветствие задается в форме «Доброе утро!» От полудня до шести вечера сообщение имеет вид «Добрый день!», а после шести — «Добрый вечер!»

Листинг 4.1.Простой пример ASP.

Simple ASP Example

11 And Hour(Now) 17 Then

strGreeting = «Добрый вечер!»


Обратите внимание на код в листинге, окруженный специальными символами: угловыми скобками и знаками процента ( ). Такие символы означают, что это серверный код, который выполняется перед тем, как страница будет на самом деле послана программе просмотра. Если бы Вы посмотрели в Internet Explorer на результирующий HTML-текст, то увидели бы следующее (в предположении, что сейчас еще не вечер, но уже не утро):

Simple ASP Example

В этом-то и состоит суть ASP. Результат исполнения кода — обыкновенный HTML! Эту страницу можно просматривать любой программой просмотра: не только Internet Explorer, но и, например, Netscape Navigator. Иными словами, ASP предоставляет разработчику подлинную платформенную независимость

У представленного кода есть еще несколько особенностей. Обратите внимание на самую верхнюю строчку — она определяет, на каком языке написан сценарий на данной странице:

Скорее всего, Вы будете писать свои сценарии на VBScript, но ASP поддерживает и JavaScript. В отличие от сценариев на клиентской стороне, здесь выбор языка абсолютно не создает проблем совместимости с различными программами просмотра, поскольку весь код исполняется на сервере.

А теперь обратите внимание на ту строку, где и происходит генерация HTML-текста. Здесь для вывода приветствия используется переменная:

Переменная strGreeting заключена в угловые скобки со знаками процента, как и весь остальной серверный код, но, кроме того, ей предшествует знак равенства. Такая конструкция играет важную роль в ASP, указывая, что в данное место HTML-страницы нужно вставить текущее значение этой переменной.

Объекты и компоненты.На самом простом уровне создание ASP-страницы — это ни что иное, как написание серверного кода для получения ожидаемого результата. Но VBScript не является полнофункциональным языком и, как только Вы приступаете к построению более сложных страниц, его выразительных средств начинает не хватать. Так, в VBScript нет встроенных функций доступа к данным; не умеет он и открывать текстовые файлы. Собственно говоря, в VBScript отсутствуют какие-либо встроенные средства доступа к каким бы то ни было внешним источникам данных. Так как же в таком случае при помощи ASP выполняются такие сложные действия, как доступ к данным? Ответ будет таким: нужно дополнить VBScript объектами и компонентами ASP.

ASP-объекты и компоненты — это не что иное, как компоненты ActiveX, подобные обычным DLL ActiveX, с которыми Вы наверняка работали в Microsoft Visual Basic. Различие между объектами и компонентами ASP состоит в том, каким образом они появляются в программе. ASP-объекты — это элементы управления ActiveX, которые в коде на VBScript доступны всегда: их не нужно создавать явно. В число объектов ASP входят Application, Session, Request, Response и Server. А вот ASP-компоненты представляют собой DLL, существующие вне структуры ASP. Эти компоненты могут быть написаны на любом языке, а некоторые по­лезные ASP-компоненты просто поставляются в комплекте с Visual InterDev. ASP-компо­ненты нужно явно создавать в коде. ASP поддерживает компоненты Database Access, File Access, Browser Capabilities, Ad Rotator и Content Linking.

Файл GLOBAL.ASA.Одна из главных трудностей разработчика для Интернета, независимо от того, какую технологию он использует, состоит в том, как сложно создать в Интернете настоящее приложение. Взаимодействие программы просмотра и Web-сервера представляет собой по сути лишенную состояния транзакцию, в ходе которой сервер посылает клиенту Web-страницу и затем забывает о его существовании. Когда клиент запрашивает другую Web-страницу, сервер ничего не помнит о предыдущем запросе. Коренная проблема для всех Web-приложений такова: как показать, что это именно приложение?

Определить приложение в среде Microsoft Windows довольно просто. Приложение запуска­ется двойным щелчком значка и завершается, когда в меню File выбран пункт Exit. В проме­жутке между двумя этими событиями данные хранятся в переменных. Но для Интернет-при­ложений это не так. Как определить, когда приложение начинается, а когда заканчивается? Можно сказать, что приложение начало работу, если пользователь зашел на узел и просмат­ривает одну из его страниц. Но что если он переходит к другому узлу, а через пять минут возвращается? Приложение все еще активно? А если пользователь отсутствовал час или два?

Проблема определения моментов запуска и завершения приложения оказывает серьезное влияние на правильное управление переменными и последовательностью выполнения. К счастью, ASP предлагает решение. Оно состоит в том, что для определения начала и завер­шения — как всего приложения, так и отдельных пользовательских сессий — используется специальный файл под названием GLOBAL.ASA. На этот файл возложено реагирование на четыре ключевых события узла: Application_OnStart (запуск приложения), Application_OnEnd (завершение приложения), Session_OnStart (начало сессии) и Session_OnEnd (завершение сессии). В листинге 4.2 приведен типичный файл GLOBAL.ASA.

Листинг 4.2.Файл GLOBAL.ASA.

Для обозначения разделов сценария GLOBAL.ASA содержит теги

Хотя GLOBAL.ASA отмечает начало и завершение приложения при помощи событий, оста­ется неясным, что же все-таки составляет собственно приложение. Одна из рабочих форму­лировок, предложенная Microsoft, определяет Интернет-приложение как виртуальный ката­лог со всеми его файлами. Если пользователь запрашивает Web-страницу из виртуального каталога под названием Bookstore, то тем самым он запускает приложение Bookstore, и в GLOBAL.ASA возбуждаются события Application_OnStart и Session_OnStart.

Согласно этому определению с приложением одновременно могут работать несколько про­грамм просмотра. Но событие Application_OnStart происходит только один раз: когда первый пользователь запрашивает Web-страницу из виртуального каталога. Когда затем страницы из этого ката­лога запрашивают другие пользователи, возбуждается только событие Session_OnStart.

В то время как приложение может относиться к нескольким программам просмотра, обра­щающимся к одному и тому же множеству Web-страниц, сессия касается какой-то одной программы просмотра, обращающейся к тем же Web-страницам. Для конкретной программы просмотра сессия длится, пока программа продолжает запрашивать страницы виртуального каталога. Если же пользователь не запрашивает Web-страницы (из данного виртуального каталога) на протяжении 20 минут (по умолчанию), сессия завершается, и возбуждается событие Session_OnEnd. Когда в данном виртуальном каталоге завершаются все сессии, возбуждается событие Application_OnEnd.

В качестве примера рассмотрим следующий сценарий. Два пользователя намереваются посе­тить на Web-узле приложение Magazine. Пользователь 1 оказывается проворнее и быст­ренько запрашивает Web-страницу DEFAULT.ASP. Тут же возбуждаются события Application_OnStart и Session_OnStart. Буквально пятью минутами позже к приложению обращается пользователь 2. Поскольку пользователь 1 как-то проявлял себя в течение последних 20 минут, приложение Magazine активно. Следовательно, возбуждается только событие Session_OnStart, сигнализируя о начале новой сессии. Кроме того, теперь для завершения приложения необходимо, чтобы завершились обе сессии.

В течение следующих 15 минут пользователь 1 не запрашивает ни­каких страниц приложе­ния Magazine. Поскольку он не проявлял активности на протяжении 20 минут, ASP приходит к выводу, что пользователь 1 закончил свою работу с приложением, и возбуждает событие Session_OnEnd. Но приложение все еще активно, поскольку в течение последних 20 минут к нему обращался пользователь 2.

Пользователь 2 работает с приложением еще час, то и дело запрашивая новые Web-страницы. Но в конце концов он отключается, а через 20 минут после того, как он покинул узел (точнее, в последний раз запросил Web-страницу приложения), возбуждается событие Session_OnEnd. Поскольку пользователь 2 был последним пользователем данного приложения, оно завершается, и возбуждается событие Application_OnEnd.

В ASP есть несколько встроенных объектов, которые доступны разработчику. Эти объекты помогают управлять многими вещами: от переменных, до передачи форм. Работать с ними легко, они вызываются из кода напрямую без какого-то особого синтаксиса.

Объект Application.Объект Application (приложение) позволяет создавать переменные приложения (application variables) — переменные, доступные всем пользователям данного приложения. Все, кто обращается к Web-страницам данного виртуального каталога, могут совместно использовать любую переменную приложения определенную для этого каталога.

В листинге 4.3 приведен пример программы, которая использует Объект Application. В нем переменная приложения служит для отслеживания времени последнего обращения к страницам приложения.

Листинг 4.3.Объект Application.

Эта страница последний раз посещалась:

Создание переменной приложения сводится к адресации объекта Application именем новой переменной, которую вы хотите создать. Например, следующий код создает новую переменную приложения с именем Company и присваивает ей значение NewTech.

Имя может быть произвольным, а переменная может содержать любую информацию, будь то число или текст.

Поскольку такие переменные доступны нескольким пользователям одновременно, вы не сможете гарантировать, что два пользователя не попытаются одновременно присвоить одной и той же переменной разные значения. Для разрешения подобных коллизий объект Application поддерживает методы Lock и UnLock. Метод Lock блокирует весь объект Application, а не только переменную, вы хотите изменить, поэтому сразу же после изменения значения переменной разблокируйте объект:

Несмотря на то, что переменные приложения пригодны для временного хранения данных, их нельзя использовать для долговременного хранения. Все данные в переменных приложения уничтожаются, когда происходит событие Application_OnEnd. Так что, если вы хотите, чтобы они сохранились после завершения приложения, позаботьтесь о их переносе в файл или базу данных.

Объект Session.Зачастую разработчиков меньше интересуют данные, совместно используемые несколькими пользователями, зато гораздо больше — данные, связанные с конкретным пользователем. ASP поддерживает переменные для индивидуального пользователя при помощи объекта Session (сессия), который позволяет создавать переменные сессии (session variables).

Листинг 4.4 демонстрирует, как определить несколько переменных сессии в файле GLOBAL.ASA. Само по себе их определение так же просто, как и в случае переменных приложения. Все, что нужно сделать — это адресовать объект Session именем переменной, которую вы хотите создать. Основное различие между переменными этих объектов — их области видимости. Переменные сессии предназначаются для одного пользователя и живут, пока пользователь поддерживает сессию. Как только в течение 20 минут (по умолчанию) пользователь не обращается к страницам данного виртуального каталога, данные пропадают.

Листинг 4-..Создание переменных сессии.

Переменные сессии можно создавать на любой Web-странице или в файле GLOBAL.ASA, а доступны они на любой Web-странице приложения, в котором эти переменные были первоначально созданы. Получить значения переменных сессии можно, считывая их из объекта Session. Следующий фрагмент кода считывает переменные сессии, созданные в листинге 4.4, и выводит их в полях ввода:

Ранее мы определили Интернет-приложение как лишенные статуса транзакции между Web-сервером и программой просмотра. Как же тогда ASP запоминает переменные сессии для каждого пользователя приложения? Ответ будет таким: эти переменные сохраняются на сервере для каждого клиента. Программа просмотра получает от сервера уникальный идентификатор, позволяющий определить, какой набор переменных кому принадлежит. Клиент этот идентификатор (Globally Unique Identifier, GUID) сохраняет, а впоследствии посылает серверу и получает именно ему предназначенные данные. Таким образом каждый клиент может иметь свой набор данных в каждом Интернет-приложении.

Осталось сказать, что для установки или считывания впемени жизни сессии (в минутах) применяется свойство Timeout объекта Session:


Объект Request.Для передачи данные клиенту создается Web-страница, а для передачи данных в обратном направлении программа просмотра использует отправку формы (form submission). В форме содержатся текстовые поля, переключатели и т.п. Клиент размещает введенные данные в этих полях и пересылает пакет серверу. Процессом передачи формы управляют два атрибута тега

Элемент формы с типом SUBMIT — это кнопка, нажатие которой пользователем заставляет программу просмотра упаковать данные формы и отправить их. Формат пересылки данных определен строго и сервер знает, чего ожидать от клиента. Данные имеют вид пар Поле=Значение, отсылаемых серверу в формате открытого текста. Если в предыдущем примере ввести в поле Name NewTech и info@newtech.com в поле Email, то сценарию DATA.ASP будет послан следующий текст:

На сервере эти данные можно вновь разобрать по полям и использовать в любых целях. Вот тут-то и нужен объект Request. Он используется в ASP для разбора полученных от клиента данных. Для работы с объектом Request просто сообщите ему имя поля, значение которого хотите получить, и объект вернет вам это значение. Например, следующий код вернет вам значение поля Name:

Request.Form применяется, когда данные были отправлены методом POST и именно этому сценарию. Если для отправки данных используется метод GET или сценарий вызывается с передачей параметров прямо в гиперссылке

то для разбота данных применяют свойство Request.QueryString, который работает так же, как Request.Form. Следующий фрагмент кода вернет значение поля Name из гиперссылки:

Другое свойство — Request.Cookies используются для извлечения информации из кукисов (cookies), отосланных вместе с запросом строке пользовательского агента программы просмотра. А листинг 4.5 демонстрирует применение свойства ServerVariables для определения имени компьютера, с которого клиент вызвал сценарий.

Листинг 4.5.Определение компьютера пользователя.

Вы вошли с компьютера

Переменные сервера представляют широкий круг информации о клиенте и Web-сервере. Доступ к каждой конкретной переменной сводится к чтению соответствующей переменной.

Объект Response.Этот объект управляет содержимым страницы, которую ASP возвращает программе просмотра. Фактически в комбинации знак равенства представляет собой сокращенное обозначение метода Write объекта Response. Так что следующие две строки кода эквивалентны:

Поскольку объект Response используется очень часто, такое сокращение оправдано.

Полезное свойство объекта Response — Expires. Оно задает время (в минутах) за которое страница устаревает. Если установить его в нуль, то страница будет устаревать в момент загрузки и Internet Explorer не будет ее кэшировать. Кэширование сильно влияет на разработку и может привести к тому, что приложение будет функционировать неправильно. IE кэширует страницы двумя способами: на диске и в памяти. Рассмотрим такой фрагмент кода, показывающий текущее время и дату:

Когда IE запрашивают страницу с этим кодом, на сервере выполняется сценарий, и на странице появляется текущее время. Однако, если программа просмотра переходит к другой странице, а затем возвращается к этой, со временем, то время не изменится, поскольку IE не запрашивает ее повторно. В листинге 4.6 приведена исправленная версия примера, устаревающая уже в момент загрузки.

Листинг 4.6.Страница, устаревающая уже в момент загрузки.

Forcing a Page to Expire

Еще один полезный метод объекта Response — Redirect, перенаправляющий программу просмотра на указанный URL:

Объект Server.Объект Server (сервер) представляет собой в некотором роде свалку — в том смысле, что предоставляемые им функции никак не связаны между собой, за тем исключением, что все они полезны разработчику для Интернета. Пожалуй, самая важная из всех функций объекта Server — это метод CreateObject, который создает экземпляр компонента ActiveX. Причем это может быть как встроенный компонент, входящий в комплект поставки, так и тот, который написали Вы сами на любом языке. В любом случае использование компонента ActiveX на сервере требует вызова метода CreateObject.

Аргументом метода CreateObject служит ProgID (программный идентификатор) требуемого компонента ActiveX. ProgID — это содержательное имя компонента, такое как Excel.Sheet или Word.Basic. Следующая строчка показывает, как при помощи CreateObject создать экземпляр компонента с ProgID Excel.Sheet.

Set MyObject = Server.CreateObject(«Excel.Sheet»)

Другим полезным методом объекта Server является MapPath, возвращающий фактический путь, соответствующий заданному виртуальному каталогу.

Компоненты ASP — это на самом деле просто компоненты ActiveX, наподобие тех, что Вы можете сами создать на Visual Basic или Visual C++. Но эти компоненты написаны Microsoft и поставляются вместе с Visual InterDev. Они предназначены для выполнения полезных для Web-узлов задач общего характера, включая доступ к данным. Создать их на своей странице Вы можете при помощи метода CreateObject объекта Server, а как только они созданы, смело обращайтесь к их свойствам и методам для выполнения нужных Вам задач.

Компонент ActiveX Data Objects.Самым полезным изо всех компонентов ASP следует признать компонент доступа к базам данных, называемый также ActiveX Data Objects, или сокращенно ADO. Он и содержащиеся в нем объекты применяются для чтения и записи данных в источники данных ODBC при публикации в Web информации из баз данных.

Объект Connection (подсоединение) создается методом CreateObject объекта Server, и ссылка на него помещается в переменную. Когда объект создан, его можно использовать для открытия подсоединения к любому источнику данных ODBC. Следующий фрагмент кода устанавливает подсоединение к источнику данных ODBC с названием Publications:

‘ Создаем объект Connection

Set objConnection = Server.CreateObject(«ADODB.Connection»)

‘ Открываем подсоединение к источнику данных

objConnection.Open «Publications», «sa», «» %>

Здесь objConnection — переменная для объектной ссылки на экземпляр объекта Connection. Метод Open устанавливает подсоединение, принимая в качестве аргументов имя источника данных, идентификатор пользователя и пароль.

Когда подсоединение установлено, получать информацию из источника данных можно при помощи объекта Recordset (набор записей). Этот объект умеет выполнять оператор SELECT языка SQL и возвращать набор записей, удовлетворяющих этому запросу. Как и объект Connection, Recordset создается методом CreateObject. В следующем примере программа выполняет оператор SELECT над источником данных, представленным переменной objConnection:

После того, как записи получены, для передвижения по ним можно обращаться к методам MoveFirst, MoveLast, MoveNext и MovePrevious. Затем метод Write объекта Response помещает данные на Web-страницу, которая и посылается программе просмотра. В листинге 4.7 приведен полный пример ASP-страницы, которая строит список пользователей, со­держащихся в источнике данных Data.

Листинг 4.7.Построение списка при помощи ADO.

Одна из основных задач в управляемом данными Web-приложении — управление информацией в объекте Recordset. Очень часто простой запрос возвращает гораздо больше данных, чем имеет смысл показывать. Давайте, например, посмотрим, что происходит, когда Вы обращаетесь к какой-либо поисковой системе в Интернете. Поисковая машина, получив ключевое слово, возвращает ссылки на узлы, где это ключевое слово встречается. Но зачастую обнаруживаются тысячи узлов, содержащих данное ключевое слово. Совершенно очевидно, что показать все эти узлы на одной Web-странице совершенно невозможно.

Выход состоит в разбиении на страницы (paging). Этот механизм реализован во всех поисковых системах для передачи за один раз некоей порции результатов запроса, скажем, из 10 записей. Теперь пользователь может эффективно работать с полученной информацией. Поддерживает разбиение на страницы и ADO — посредством нескольких свойств объекта Recordset: PageSize, PageCount и AbsolutePage.

При получении набора данных можно указать, что записи следует разбить на страницы. Количество строк набора данных, составляющих страницу, задается значением свойства PageSize. Затем можно определить общее количество страниц в наборе данных посредством свойства PageCount. А доступ к заданной странице обеспечивает свойство AbsolutePage.

В листинге 4.8 приведен полный пример, в котором пользователь может просматривать 10 записей за раз. Переменная сессии CurrentPage отслеживает текущую страницу. Пользователь может перейти к предыдущей порции данных или к следующему набору из 10 записей, выбрав одну из двух гипертекстовых ссылок на странице.

Листинг 4.8.Разбиение набора данных на страницы средствами ADO.

Илон Маск рекомендует:  Получаем список страниц для dle движков при помощи php
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL