Asp семейство session staticobjects


Содержание

Asp семейство session staticobjects

Опубликовано: Октябрь 2020

Возвращает коллекцию объектов, объявленных тегов в файле Global.asax приложения ASP.NET.

Пространство имен: System.Web.SessionState
Сборка: System.Web (в System.Web.dll)

Значение свойства

HttpStaticObjectsCollection Содержащая объекты, объявленные в файле Global.asax.

Если объект на странице не поддерживает сериализацию и — out of process ( SQLServer или StateServer), объект не будет создан и не будут добавлены в эту коллекцию.

Свойство предоставляется для обеспечения совместимости с предыдущими версиями ASP.

В следующем примере кода списки > коллекции.

Difference between JSP/ASP session object Sessions & website User Account Sessions? Are they different?

I was revising the concept of Session Objects in JSP & ASP.Net. I was confused, ‘when an actual Session Object is created?’ Until recently I thought it was created when a user logs into his account, But now I read in the books that its implicitly created when the user visits any page on your site.

So when is it actually created? And are JSP sessions different from Website User Account sessions?

If the latter is correct, Is a second new Session created when a user actually logs into his account, and the previous session destroyed? eg: A shopping site may allow a user to select many items & ‘Add to My Cart’. What happens to this data after he logs in. Is a new session created internally after destroying the initial one?

If this seems confusing, then you can just specify how Session is typically implemented in real-world systems (as I’m a student)? When is the session typically started? What data is stored in it? What is the typical timeout you set and why?

My research: JSP sessions are abstract concepts and User account sessions are implementation specific. Both are different

Asp семейство session staticobjects

Yayımlanan: Nisan 2020

Tarafından bildirilen nesneler koleksiyonunu alır ASP.NET uygulama dosyası Global.asax içindeki etiketler.

Ad alanı: System.Web.SessionState
Derleme: System.Web (System.Web.dll içinde)

Özellik Değeri

Bir HttpStaticObjectsCollection Global.asax dosyasında bildirilen nesneler içeren.

Bir sayfadaki bir nesne seri hale getirme desteklemez, ve işlemi-( SQLServer veya StateServer), nesne oluşturulmaz ve bu koleksiyona eklenemiyor.

Özelliği, ASP önceki sürümleriyle uyumluluk için sağlanır.

Aşağıdaki kod örneği listeleri > koleksiyonu.

Как получить хранящееся значение в сессии ASP.NET MVC 4?

В одном из методов контроллера устанавливаю значение сессии:

В другом методе контроллера пытаюсь получить значение:

string test = Session[«User.Project»];

В переменную test попадает null. Пробовал HttpContext.Session тоже самое.
Конечно пользователь сначала проходит по первому методу контроллера, потом по второму методу.
Если достать значение сессии в первом методе контролера, сразу после записи то значение там есть. Работает нормально. Но вот во втором методе контроллера его как будто нет.

  • Вопрос задан более трёх лет назад
  • 4338 просмотров

Quber: по снимку, все нормально, так и должно быть. В контроллере доступ без Current, или вообще можно опустить HttpContext.

По вопросу, почему null — может напутали чего. Например, на снимке имя параметра сессии User_Project, а в тексте вопроса: User.Project. И тип данных разный.

Если нет, то поведение Session вы намерено не настраивали? Cookies у клиента нормально работают? Ну и глупый вопрос, вы уверены, что между переходом от метода, в котором создается сессия, к следующему методу проект не перекомпилируется? :-)

Еще один вопрос, если сессия возвращает тип object, то почему вы пишите string test = Session[«User.Project»]; Действительно такой код используете, или это просто ошибка в тексте вопроса?

Алексей Немиро: Спасибо за развёрнутый ответ.

По вопросу, почему null — может напутали чего.

Например, на снимке имя параметра сессии User_Project, а в тексте вопроса: User.Project. И тип данных разный.

Если нет, то поведение Session вы намерено не настраивали? Cookies у клиента нормально работают?

Ну и глупый вопрос, вы уверены, что между переходом от метода, в котором создается сессия, к следующему методу проект не перекомпилируется? :-)

Еще один вопрос, если сессия возвращает тип object, то почему вы пишите string test = Session[«User.Project»]; Действительно такой код используете, или это просто ошибка в тексте вопроса?

А применении точки в названии ключа сессии приводит к возвращению объекта? Или как вы определили, что сессия возвращает объект? По сути должно либо string, либо int. Но потом приводится к integer (int)

Я обычно пишу на php и там нету проблем в названии ключа для сессии, с точкой или нижнем дефисом, поэтому я предположил что здесь тоже нет разницы. Но всё равно, я переписал с указанием нижнего дефиса для того, чтобы исключить его вину.

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

Asp семейство session staticobjects

Нередко для обработки запроса требуется информация о контексте запроса: какой у пользователя браузер, ip-адрес, с какой страницы или сайта пользователь попал к нам. И ASP.NET MVC позволяет получить всю эту информацию, используя объект HttpContext.

Хотя в контроллере мы также можем обратиться к объекту ControllerContext , который имеет свойство HttpContext и по сути предоставляет доступ к той же функциональности и информации. Но в то же время между ними есть некоторые различия. Объект HttpContext описывает данные конкретного http-запроса, который обрабатывается приложением. А ControllerContext описывает данные http-запроса непосредственно по отношению к данному контроллеру.

Вся информация о контексте запроса доступна нам через свойства объекта HttpContext. Так, все данные запроса содержится в свойстве Request . HttpContext.Request представляет объект класса, унаследованного от HttpRequestBase , и поэтому содержит все его свойства. Рассмотрим некоторые из них:

Получение браузера пользователя: HttpContext.Request.Browser

Иногда просто браузера недостаточно, тогда можно обратиться к агенту пользователя: HttpContext.Request.UserAgent

Получение url запроса: HttpContext.Request.RawUrl

Получение IP-адреса пользователя: HttpContext.Request.UserHostAddress

Получение реферера: HttpContext.Request.UrlReferrer == null ? «» : HttpContext.Request.UrlReferrer.AbsoluteUri Так как реферер может быть не определен, то сначала смотрим, не равен ли он null

Отправка ответа

Если HttpContext.Request содержит информацию о запросе, то свойство HttpContext.Response управляет ответом. Оно представляет объект HttpResponse , который передает на сторону клиента некоторые значения: куки, служебные заголовки, сам ответ в виде кода html. Например, установим кодировку ответа: HttpContext.Response.Charset = «iso-8859-2»;

Методы объекта HttpResponse позволяют управлять ответом. Например, метод AddHeader позволяет добавить к ответу дополнительный заголовок.

Кроме того, нам необязательно вызывать метод View в действия контроллера, чтобы отправить клиенту ответ запроса. Мы вполне можем воспользоваться методом HttpContext.Response.Write :

Метод HttpContext.Response.Write здесь добавляет в поток определенное содержимое, переданное в качестве параметра. Но в реальности, конечно, проще использовать методы, генерирующие объекты ActionResult, например, представления.

Определение пользователя

Также объект HttpContext содержит информацию о пользователе в свойстве HttpContext.User :

Подробнее об идентификации пользователя можно узнать в главе про аутентификацию и авторизацию.

Работа с куки

Чтобы получить куки, нам надо воспользоваться свойством HttpContext.Request.Cookies :

В данном случае, если у нас установлена на стороне клиента куки «id», то мы получим ее значение.

Однако прежде чем получать значения куки, их естественно надо установить. Для установки значения куки мы можем использовать свойство HttpContext.Response . Например, установим в куки значение «id»:

Сессии

Сессии также, как и куки, используются для хранения некоторых данных, которые можно получить в любом месте приложения. Для работы с ними используется объект Session . Например, установим в одном методе контроллера мы можем установить значение сессии:

А получить можно в другом методе:

Если мы хотим удалить значение сессии для ключа name, мы можем просто присвоить значение null: Session[«name»]=null;

HTTP сессия. Session. Состояние сеанса. Работа с сессиями в ASP.NET MVC

Давайте рассмотрим такое понятие как сессия (HTTP-сессия, Session). Или по-другому, сеанс пользователя. Почему важно понимать механизм работы сессий. И посмотрим, как можно работать с состояниями сеансов на платформе ASP.NET.

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

Одной из основных особенностей протокола HTTP является то, что он не обязывает сервер сохранять информацию о клиенте между запросами, то есть идентифицировать клиента. Это так называемый stateless-протокол. Связь между клиентом и сервером заканчивается как только завершается обработка текущего запроса. Каждый новый запрос к серверу подразумевается как абсолютно уникальный и независимый, даже если он был отправлен повторно от одного и того же источника.

Что, если оставить stateless-природу протокола HTTP и не идентифицировать пользователя? Без состояний сеанса можно легко обойтись, если на вашем сайте представлена статичная (обезличенная) информация, например, новостная статья, состоящая из текста и изображений. В таком контексте совершенно необязательно ассоциировать несколько запросов с одним пользователем. Ведь содержание статьи никак не изменится, будь то десять запросов с одного устройства, либо десять запросов от разных людей с разных устройств.

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

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

Илон Маск рекомендует:  Что такое код socket_getsockname

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

Например, при совершении покупки в онлайн магазине персональная информация пользователя сохраняется в сессии, пока он путешествует по сайту. Это выбранные товары в корзине, адрес доставки, контактные данные и так далее.

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

  1. скрытые поля на HTML-форме (hidden form fields)
  2. куки (cookies)
  3. сессия (session, session State)

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

Скрытые поля на HTML-форме (hidden form fields)

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

В данном примере мы на первой html-форме получаем имя пользователя. Далее в контроллере в методе Forms2() мы извлекаем это значение из коллекции Form и передаем в представление посредством объекта ViewBag. В этом представлении генерируется код новой формы и в скрытом поле сохраняется имя пользователя. Таким образом, значение имени пользователя будет передано уже на третью формы вместе с дополнительной информацией — значением поля с именем «foodName». И так далее.

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

  • Во-первых, этот вариант не будет работать, если html-формы на наших страницах статичны, то есть жестко закодированы. И чтобы это исправить, чтобы повлиять на html-разметку мы прибегаем к помощи какой-нибудь серверной технологии (в данном случае механизм ViewBag);
  • Это безопасность. Хоть вводимые нами данные не передаются через url-параметры в адресной строке и визуально не видны на странице, мы с легкостью можем их получить или подменить или удалить или украсть просто изучив исходный код страницы или структуру запроса;

Куки (cookies)

В данном подходе мы не храним сессионные данные непосредственно на форме, вместо этого используется стандартный механизм работы cookies между клиентом и сервером. В cookies и хранятся все пользовательские данные.

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

Серверный механизм управления сессией (Session, SessionState)

Разберем, как работает механизм сессии со стороны сервера и со стороны клиента.

При стандартных настройках работы состояния сеанса для отслеживания серии запросов от одного клиента используется т.н. сессионная куки (session cookie). Алгоритм следующий:

  1. Абсолютно для каждого нового запроса на сервер (неважно, разные это клиенты или один) ASP.NET генерирует уникальный идентификатор сессии.
    Идентификатор сессии представляет собой случайно сгенерированное число, закодированное с помощью специального алгоритма в строку длиной 24 символа. Строка состоит из литералов от A до Z в нижнем регистре, а также чисел от 0 до 5. Пример идентификатора — hjnyuijl1pam3vox2h5i41in
  2. Если в течение текущего запроса данные клиента НЕ сохраняются для дальнейшей работы с ним, то и время жизни сессии этого клиента заканчивается (фактически не начавшись). При этом ранее сгенерированный идентификатор сессии становится недействительным (так как не был использован). В ответ на такой запрос клиент не получает ничего, чтобы связало его с новой сессией.
  3. Если же данные клиента (например, имя, адрес доставки товара) сохраняются на сервере, ASP.NET связывает сохраненные данные с ранее сгенерированным идентификатором сессии. Далее создается специальная сессионная куки, и в нее записывается также этот идентификатор. Эта куки добавляется в ответ на запрос и сохраняется в браузере клиента. Таким образом, создается связь клиента и его персонализированной информации на сервере. Новая сессия для данного клиента создана.
  4. При каждом следующем запросе клиент передает на сервер персональный идентификатор сессии через куки. Сервер сопоставляет идентификаторы и «узнает» клиента в рамках текущей сессии.
  5. До тех пор пока клиент передает свой персональный ключ, сессия считается активной. Сессия может закончиться по разным причинам, например, вручную на стороне сервера или по истечении какого-то установленного времени (таймаут).

От теории перейдем к практике. Давайте запрограммируем данный алгоритм и посмотрим, как он выполняется. Для этого используем специальный класс HttpSessionState . При работе в контроллере можно воспользоваться свойством HttpContext.Session . Работать с сессией очень просто, как с любой NameValueCollection :

В этом участке кода мы записываем в состояние сеанса имя пользователя. Это имя мы забираем с html-формы, которую он нам отправил. Дополнительно через свойства мы узнаем, создана ли эта сессия только что, то есть в рамках текущего запроса (если да, то и значение свойства IsNewSession будет равняться true), и уникальный идентификатор сессии. Этот идентификатор после обработки запроса будет автоматически записан в сессионную куки (если еще нет) и отправлен в ответе клиенту.

В браузере клиента можно наблюдать соответствующую куки и идентификатор его сессии:

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

Как видно, работать с сессиями очень просто и удобно. Большинство процессов, связанных с обработкой сессии, происходит автоматически в фоновом режиме. Естественно, разработчик может вмешаться на любой стадии обработки сессии и внести свои коррективы.

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

Item[index] – возвращает элемент данных по его индексу
Item[key] – возвращает элемент данных по его ключу
Remove(index) – удаляет элемент данных по его индексу
Remove(key) – удаляет элемент данных по его ключу
Clear() – удаляет все данные
Count – возвращает общее количество элементов данных для текущей сессии
Abandon() – принудительно завершить сессию
SessionID — возвращает идентификатор текущей сессии
IsNewSession – возвращает true если сессия была создана в рамках текущего запроса
Timeout – возвращает число минут, допустимое между запросами, перед тем как сессия завершится по причине таймаута (по умолчанию, 20 минут)

Изменить настройки для сессии можно либо программно в коде посредством членов класса HttpSessionState , либо через конфигурацию приложения (файл web.config). Например:

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

Управление состоянием в ASP.NET
Страница 5. Серверные методы. Session

Session

Контейнер Session похож на Application, с той лишь разницей, что для каждого пользователя приложения создается своя собственная сессия со своими собственными значениями. Для идентификации пользователей ASP.NET использует 120-битный ключ, именуемый SessionID и состоящий только из ASCII-символов, которые допустимы для использования в URL. В зависимости от настроек веб-приложения, этот ключ сохраняется либо в Cookie либо включается как часть URL.

Если приложение настроено на использование URL для хранения SessionID, то написав в браузере, например, http://localhost/StateManagement/SessionStateTest.aspx, после загрузки страницы мы увидим вместо него нечто такое http://localhost/StateManagement/(evzobo45mp1rat55b3qm5o55)/SessionStateTest.aspx, где evzobo45mp1rat55b3qm5o55 — тот самый SessionID

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

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

Также как Application, для совместимости с предыдущими версиями ASP, контейнер включает в себя две коллекции Contents и StaticObjects. Для доступа к Contents можно либо использовать одноименное свойство, либо индексатор Session. Например:

Коллекция StaticObjects является read-only коллекцией, ее элементы определяются в файле Global.asax с помощью тега . Например:

Использовать его можно аналогично вышеуказанному примеру для Application:

%3c%21— в aspx файле —%3e

// в коде на C#
StringBuilder sb = (StringBuilder)Session.StaticObjects[«SessionStr»];
sb.Append(«My String»);
Label1.Text = Session.StaticObjects[«SessionStr»].ToString();

Механизм сессий, в отличие от Application, предоставляет несколько способов сохранения. Какой из них использовать в приложении, определяется атрибутом mode тега в файле web.config. Этот атрибут может принимать пять значений:

Off. Сессии отключены, т.е. данные сессии никак не сохраняются.

InProc. Способ, унаследованный от предыдущих версий ASP. Сессия храниться в локальной памяти веб-сервера. В результате при сбое приложения или перезапуске веб-сервера все данные теряются. Это может быть вызвано, например, настройками из тега

Asp семейство session staticobjects

Описание объекта Session

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

Вэб сервер автоматически создает объект Session когда страница приложения востребуется пользователем, который до сих пор не имел сессию. Сервер разрушает объект Session когда время «существования» сессии истекает или же ссесия разрушается принудительно.

Основное использование данного объекта это хранение в нем пользовательских «персоналий». К примеру, если пользователь указывает на то, что ему не надо показывать графические изображения вы можете запомнить эту информацию в объекте Session. Для более подробной информации по данному объекту вы можете обратиться к разделу Управление Сессиями в разделе APS-приложений.

Замечание: Данный объект может быть смонтирован только для браузеров, поддерживающих cookies.

Коллекция Session.Contents

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

ключ
Имя свойства для получения его значения.

Вы можно использовать структуру управления циклом через ключи данной коллекции. Это демонстрируется в следующем примере:

Dim sessitem
For each sessitem in Session.Contents
response.write(sessitem & » : » & Session.Contents(sessitem) & «
«)
Next
%>

Коллекция Session.StaticObjects

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

ключ
Название свойства, служащее для получения через него его значения.

Вы можете использовать структуру цикла через ключ для доступа к свойствам данной коллекции. Это демонстрирует следующий пример:

Dim objprop
For each objprop in Session.StaticObjects
Response.write(objproperty & «:» & Session.StaticObjects(objprop) & «
«)
Next
%>

Метод Session.Abandon

Метод Abandon разрушает все объекты запомненные в объекте Session и высвобождаются занятые этим ресурсы. Если вы не вызываете данного метода, то сервер сам «разрушит» эти объекты когда истечет время «жизни» сессии, т.е. тайм аут.

Когда метод Abandon вызывается, текущий объект Session ставится в очередь на удаление, но реально будет уничтожен только после того, как все команды данног скрипта будут обработаны.Это подразумевает, что можете еще воспользоватся обращением к переменным, запомненным в объекте Session в любом месте данной, но никакой другой страницы.

Следующий пример демонстрирует вывод клиенту переменной Mary. Этот пример работает работает потому, что объект Session будет уничтожен только после обработки всего текущего скрипта.

Session.Abandon
Session(«MyName») = «Mary»
Response.Write(Session(«MyName»))
%>

Если вы обращаетесь к переменной MyName на другой странице, то она будет пуста.

Сервер создает новый объект Session когда вы открываете другую страницу вэб сервере (другой скрипт) после прерывания (Abandon) сессии. Вы можете запоминать переменные и объекты в этом новом объекте Session.

Свойство Session.CodePage

кодовая_страница
беззнаковое целое значение, представляющее корректный номер кодовой страницы для системы, в которой запущена ASP-машина.

Кодовая страница это набор символов. Различные языки могут использовать различные кодовые страницы. К примеру ANSI — кодовая страница 1252 используется для «Американского» английского языка и большинства европейских языков. Страница — 1251 — кириллица для русского языва в среде Windows.

Свойство Session.LCID

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

LCID
корректный идентификатор месторасположениея.

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

Свойство Session.SessionID

Свойство SessionID возвращает идентификатор сессии для данного пользователя. Каждая сессия имеет уникальный идентификатор, который создается сервером, когда сессия создается. Данный идентификатор возвращается как данные типа Long.

Вы не должны использовать свойство SessionID для того, чтобы создать значение основного ключа в приложениях баз данных потому, что после рестарта Web-сервера, значения идентификатора сессии могут повторяться. Вместо этого вы можете использовать автоинкриментирующийся счетчик записей, к примеру IDENTITY, поддерживаемый Microsoft® SQL server или в Microsoft® Access — COUNTER.

Свойство Session.TimeOut

Свойство TimeOut указывает на период времени в минутах, связанный с объектом Session для приложения. Если пользователь не обновить (refresh) или не запросить страницу у сервера в течение указанного периода времени — сессия будет завершена.

минут
указанное время в минутах, по истечении которого сервер закончит сессию автоматически.

Событие Session.Session_OnEnd

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

язык_скрипта
Указывает на язык программирования, который будет использован для написания данной процедуры. Им может быть любой из поддерживаемых языков программирования — таких как VBScript или JScript. Если более одного события используют один и тотже язык программирования, то они могут быть объеденены между парой тэгов

язык_скрипта
Указывает на язык программирования, который будет использован для написания данной процедуры. Им может быть любой из поддерживаемых языков программирования — таких как VBScript или JScript. Если более одного события используют один и тотже язык программирования, то они могут быть объеденены между парой тэгов

Приведенный пример работает только с браузером, который поддерживает cookies. Браузер, не поддерживающий cookie не возвратит SessionID — идентификатор, сервер будет создавать новые сессии каждый раз, когда пользователь будет запрашивать страницы. И для каждого такого запроса сервер будет обрабатывать скрипт события Session_OnStart и перенаправлять пользователя на стартовую страницу. Если вы воспользуетесь примером ниже, то вам необходимо на начальной странице вашего приложения оповестить посетителей о том, что для просмотра вашего сервера необходим cookie-совместимый браузер.

Вы должны учитывать, что любой текст скрипта события Session_OnStart, следующий за методом Redirect выполняться не будет! Для того, что бы учитывать эту особенность вы должны поставить вызов метода Redirect последней командой вашего скрипта события. Это продемонстрировано в примере ниже:

В предыдущем примере метод Redirect вызывается последним в процедуре и следовательно все предшествующие ему команды будут корректно выполнены.

16.2 ASP objects and their applications on the Web

16.2 ASP objects and their applications on the Web


16.2.1 The structure of ASP

Basically, ASP is an environment that allows you to write Web pages using a variety of scripting languages. In fact, you can use several scripting languages within a single ASP page to enhance the functionalities via scripting library scenarios. Since server scripts are read and processed on the server before being sent back to the browser, there is no client requirement for ASP. As a server page inside the server, an ASP page (or document) requires a new file extension .asp to distinguish it from the usual XHTML document.

By default, ASP uses VBScript and JScript as the processing languages. If you want to use another scripting language, you may need to install the appropriate scripting engine, which is a program that can process commands and statements written in a particular language. For every installation of ASP, VBScript and JScript are provided. We will show you how to install another scripting engine called PerlScript in the next section. A structure diagram of ASP is shown in Fig. 16.3.

Figure 16.3. Calling an ASP page

To use the multiple languages feature of ASP and related objects, let’s consider some examples in the discussion below.

16.2.2 Creating ASP pages with different scripting languages

In this section, we will show you how to use different languages with ASP. Simple examples of three scripting languages are introduced, namely, VBScript, JScript, and PerlScript. They all have their own language syntax and style and work in the ASP environment as family members.

Another characteristic of ASP is that it is object based. System objects will work closely with your choice of scripting languages. That means you can use your favorite language syntax and style such as VBScript, JScript (a variant of ECMAScript), or PerlScript to call ASP objects to perform the function you want.

As a simple example, consider the following ASP page written in VBScript:

The first line is to indicate that this is an ASP page using VBScript as the primary language. This means that statements inside the delimiters and %> (lines 813) will be processed by the VBScript engine installed in ASP. By default, VBScript is the primary language for ASP. Insider the delimiters, there is a for-loop in VBScript style. Consider the statement in line 10:

The keyword Response is an object provided by ASP. With this object, you can call the member function (or method) Write() to output something to the browser screen. Inside the parentheses, the ampersand «&» is a VBScript symbol to concatenate two strings.

The JScript version of this example is listed below:

The process directive in line 1 indicates that the primary language is JScript (JScript is a version of JavaScript developed by Microsoft; for this reason, JScript is very similar to ECMAScript discussed in this book). The for-loop (lines 913) inside the delimiters is written in JScript (or ECMAScript) style. The plus «+» symbol is used to concatenate strings. No matter what kind of language you are using, you call the same method

to output something to the screen.

If you want to use another scripting language such as PerlScript on ASP, a PerlScript engine is available from ActiveState Perl (www.activestate.com). It has a Perl version with a Microsoft installer so that the installation and configuration on various Microsoft systems are fully automatic. When you install Active Perl, you will have a working version of the Perl interpreter and a PerlScript engine for ASP at the same time.

If you have a PerlScript engine already installed on your system, you can convert the example above into a PerlScript version as follows:

Again, the first line is to instruct ASP to process statements inside delimiters with PerlScript. The purpose of the for-loop is to show the calling convention when using PerlScript with ASP. Following the PerlScript syntax, all variables need to have a dollar sign in front of them. Since PerlScript uses references to call objects and functions provided by ASP, the output function is changed to $Response->Write() as illustrated in lines 11 and 12. The period symbol «.» used in lines 11 and 12 is to concatenate the strings. In fact, you can put the variable $ii inside, since Perl can interpret a variable correctly even inside a string.

In ASP, the primary scripting language can call functions defined in other scripting languages. To show this feature, consider the following example:

By default, this ASP page uses VBScript as the primary scripting language. Other scripting languages can be defined by the

Inside the script section, you can define any JScript function. The keyword runat=server is to instruct the ASP to run this section on the server. The block in lines 1420 defines a JScript function called outputDate() to display the date and time of the system. Another script block in lines 2330 defines a PerlScript subroutine called outString . This subroutine is to output some strings to the browser window.

When ASP loads this page, the ASP script section (if any) is stored and executed first. Therefore, when ASP executes the JScript statement in line 10

the JScript function outputDate() is already there and ready for execution. If you put any output statement inside the ASP script section, this statement will be executed and placed before the XHTML header. A screen shot is shown in Fig. 16.4.

Figure 16.4. Multiple scripting languages on ASP

For the rest of this chapter, we will mainly use JScript as the primary scripting language for ASP. We make this choice simply because JScript is consistent with the standard ECMAScript and acceptable by many different platforms. To learn ASP, a basic understanding of the internal objects provided by ASP installation is necessary.

Not just multiple languages can be used in ASP: with ASP objects Web applications can be developed in other dimensions. Let’s consider the ASP objects and see how to build Web pages with application- and user-specific (or session) scopes in the next section.

16.2.3 The internal objects of ASP

Basically, ASP is a combination of XHTML, your favorite scripting language, and objects provided by you, the system, and third-party vendors. For a standard ASP installation, the system framework provides the following six built-in objects:

Built-in objects are closely integrated into every ASP page. Unlike other components, you don’t even need to create them before you can use them in your scripts. For each built-in object, there are methods (or functions), collections, and properties associated with them. For example, the function Response.Write() used in section 16.2.2 is a function inside the Response object.

From a practical point of view, the best way to learn ASP is to start with one favorite scripting language such as JScript and a basic understanding of the objects associated with ASP. Basically, there are six ASP objects, as above, and the purpose of each of them is summarized as follows:

The Application object is an object providing collections and utilities to share information among all users of a given application.

The ObjectContext object is mainly used for transactions and enables you to commit or abort a transaction in a business application.

The Request object is a widely used object in ASP. You can use it to gather the contents submitted from any type of Web form including the CGI get and post methods, and to read server variables or the contents of a digital client certificate.

The Response is widely used and responsible for sending data from the server to the user. You can use this object to send information directly to the browser, redirecting the browser to other URLs and handling cookies.

The Server object is to provide certain server-side functions to the users. The most important function is to create an instance of an ActiveX component with Server.CreateObject . For example, you can use it to open a file. Furthermore, the following statement can be used to instantiate an ActiveX Data Object (ADO) for database connection:

We will discuss this application in detail in the coming sections.

The Session object enables you to associate variables with a particular user section. Information or variables stored in this object are still alive when a Web application jumps from one page to another.

From ASP 3.0 and later, an additional built-in object called ASPError has been shipped. This object is responsible for tracking down errors during the processing of an ASP page.

For each ASP built-in object, we also have collections, methods, events, and properties associated with them. Their relationships are summarized in Table 16.1.

Table 16.1. ASP built-in objects

ClientCertificate Cookies Form QueryString ServerVariables

CreateObject HTMLEncode MapPath URLEncode

AddHeader AppendToLog BinaryWrite Clear End Flush Redirect Write

Buffer CacheControl Charset ContentType Expires ExpiresAbsolute IsClientConnected PICS Status

CodePage LCID SessionID Timeout

One of the best ways to study ASP objects is to learn and use the methods associated with the particular object. For example, the popular Write() methods of the Response object can be called by the following ASP statement:

This statement will output the text «Some Strings» to the browser. If you want to redirect your ASP page to another page or location, you can use the Redirect method of the Response object as

On the whole, ASP provides a rich set of tools to build Web applications. From simple data sharing for Web pages to large, complex Web programming, these objects and their features are invaluable. We will show you how to use most of them step by step. Now, let’s begin with the Application object.

16.2.4 Creating ASP pages with application scope

The Application object of ASP can be used to share information among all users. For example, if you defined a welcome message

your other ASP pages used by other users can obtain this text by

In fact, the message is stored in Application.Contents , which is a collection of the object (see Table 16.1). Any information in Application.Contents can be retrieved by name. Therefore, the Response.Write() statement above can output the text. Not just text, but for any variables or events the entire object can be put into the Application object and shared among all your ASP pages. This feature is known as information with application scope.

Data or information with application scope will remain available for the live time of the application. That means they are available for all users visiting the site until after a system reboot. Unlike file storage, information with application scope is not permanent but can exist for a long period of time. This feature is particularly useful for certain kinds of applications described below. But first, let’s consider the two methods provided by the Application object.

Since Application is an object designed for multiple accesses at the same time, it contains two methods (or functions), Lock() and Unlock() . You can use the Lock() function to lock the system and store variables or created objects to the Contents of the object. The Applicaton.Contents is a collection of the object and all information stored in it that can be retrieved later by other Web pages. In its simplest form, you can use it to build a temporary page counter to pick up a winner based on the number of visits or page hits. For this application, you don’t need to create a file and it would not affect the permanent page counts. Consider the following ASP page:

For a busy site, it is likely that simultaneous access occurs at the same time. To avoid any counting confusion, the Lock() function in line 13 is used to lock the page for exclusive access and update. Since locking the page prevents any page updating by others, you should unlock the page as soon as you have finished the updating.

The scripting block in lines 2125 contains a simple if statement. This statement is to pick up the winner when the page hits are the same as the winning number winNo . Some screen shots of this example in action are shown in Figs 16.5a and 16.5b.

Figure 16.5a. ex16-06.asp

Figure 16.5b. Pick up the 100th visitor

16.2.5 Building user scope applications with the Session object

In addition to the Application object, the Session object can be used to store information needed for a particular user session. When a user who does not already have a session requests an ASP page, the Web server automatically creates a Session object for him or her. Variables and information can be stored in this Session object dedicated to this user. This feature is usually called session scope.

You can use the same method as for the Application object to store messages for the Session object. For example, if you define the following text and store it in the Session object

the string will be stored in a variable called welcome of the Session object. All visitors to this ASP page will have this message defined in an independent session. The message can be retrieved later by:

Information stored in the Session object is not discarded when the user jumps between pages. When a user finishes his or her session or the abandon method is called, all information and objects stored in the session will be destroyed.

Also, the Session object provides a SessionID property to identify each session and user. It is a unique identifier with a long integer data type generated by the Web server. For example, the following command generates a SessionID :

Many Web sites use this feature to build user identity when the user visits the site. This identity is used to identify the user and give away free gifts, say. Consider the example below:

This is a simple ASP page to demonstrate the use of the Session object. Lines 1113 start a session with a simple message stored in the variable welcome . This message is later retrieved by the Session statement in line 16. The SessionID is displayed as well. Next, there is a conditional statement to give away a free gift.

Basically, we use two more session variables gift and gift_detail . If the gift variable stores the string «yes» that means the user has already claimed his or her free gift and the details of the free gift are displayed (line 25). If the user has not claimed his or her free gift, the messages in lines 2022 are displayed. In particular, the message in line 2122:

uses an anchor element to activate the ASP page ex16-07a.asp to claim the gift.

Surprisingly, the ASP page ex16-07a.asp contains only six lines:

Since this page is invisible to the user, it can be written as pure ASP code. In fact, this page has three statements only. The first statement is to assign a session variable called gift to the string «yes.» The second statement in line 4 provides the details of the free gift. The final statement uses the Redirect function of the Response object to redirect the user back to the original page ex16-07.asp. Some screen shots of this example are shown in Figs 16.6a and 16.6b.

Figure 16.6a. ex16-07.asp

Figure 16.6b. Claim your free gift

This example has session scope and every user or activation will be assigned a SessionID . Unless you have many gifts, you may also need to ask the user to fill out a claim form in order to make a claim.

ASP Session Object

The Session object stores information needed for a particular user’s session on the web server. It is automatically created every time when an ASP page from the web site or web application is requested by a user who does not already have a session, and it remains available until the session expires.

The Session object is user specific. It can be used to store variables specific to a particular user and IIS will maintain these variables when the client moves across pages within your web site.

The Session object is based on using cookies, so if cookies are not permitted on the client browser (because of firewall issues, browser incompatibility, or desktop/network security concerns), the Session object is rendered useless. The syntax, collections, properties, methods and events of the ASP Session object are as follows:

Илон Маск рекомендует:  Что такое код dbplus_last
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL