Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 932

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Далее происходит подготовка к записи строки из трех полей в базу данных. Вначале задаем строку подключения к базе данных, затем — непосредственное подключение Connection. Далее перед непосредственной записью строки посеще­ния в базу данных происходит проверка, есть ли (зарегистрирована ли уже) запись об этом посещении. Может быть, пользователь в своем браузере просто обновил страницу путем нажатия клавиши <F5>. Вы можете себе представить, читатель, какой соблазн появляется у пользователя нажимать <F5>, если он видит, что после каждого нажатия увеличивается количество посещений сайта! Чтобы избежать это­го, воспользуемся объектом страницы Page.Session.

В технологии ASP.NET каждое Web-приложение при обращении к нему поль­зователя (клиента) создает объект Page.session, этот объект называют сессией или сеансом пользователя. Объект Session содержит в себе методы для создания кол­лекции данных. Причем созданная коллекция данных на одной странице Web-приложения оказывается доступной на любой другой странице данного приложения. Даже если пользователь перешел на другое Web-приложение (на другой Web-узел), а затем вернулся в данное приложение, то исходная коллекция данных сессии будет сохранена. Она будет сохранена до тех пор, пока пользователь не закрыл свой Web-браузер. Однако время жизни (лимит времени) сессии все же ограничено параметром timeout. По умолчанию время жизни равно 20 минутам, его можно регулировать в файле программной поддержки свойством объекта Session.Timeout или прямо в тексте программы.

Программировать создание сессии пользователя и получение из нее информации, доступной во всем приложении, несложно. Например, включение (добавление) в коллекцию данных сессии пар "имя (ключ) — значение" можно программировать таким образом: Session("Имя пользователя")="Андрей" или Session.Add("Имя пользователя", "Андрей"). Похоже на манипуляции с записями в хэш-таблице. На любой дугой странице данного Web-приложения имеем доступ к данным, записанным в коллекцию данных сессии: Label1.Text = Session("Имя пользователя") или Label1.Text = Session.Item("Имя пользователя"). Таким образом можно обмениваться данными между страницами Web-приложения.

Теперь вернемся к добавлению в БД записи о данном посещении страницы. По­сле команды
ExecuteNonQuery запись в базу данных будет добавлена, затем сразу после этого включаем в коллекцию текущей сессии пару Page.Session(“есть ли запись об этом посещении? ") ="да". Теперь эта пара будет существовать не только после нажатия клавиши <F5> (команда в браузере Обновить страницу), но и по­сле того, как пользователь покинет данное Web-приложение и затем вернется в него опять. (Но при этом не будет закрывать свой Web-браузер.) Поэтому в программном коде, прежде чем добавлять запись в базу данных о посещении эльзователя, предусмотрена проверка с помощью коллекции объекта Session. Фрагмент работы счетчика посещений представлен на рис. 14.7.



Рис. 14.7. Фрагмент работы Web-страницы, подсчитывающей посещения

Теперь давайте проверим полученный IP-адрес. Является ли он действительно адресом нашего локального компьютера в Интернете? Для этого на панели задач вашего компьютера найдем значок Подключение по локальной сети. В контекст­ном меню выберем пункт Состояние. В появившемся окне на вкладке Поддержка увидим свой правильный IP-адрес. Он будет отличаться от выведенного в форму, почему? Дело в том, что фрагмент работы данной программы получен на локаль­ном сервере, поэтому и IP-адрес мы получили как адрес из внутренней подсети. После того как проект Web-приложения будет скопирован на удаленный сервер, предоставляющий Web-хостинг, мы получим корректный IP-адрес. Как указыва­лось ранее, три первых строки, выведенные в форму, носят отладочный характер и могут быть удалены из программного кода.

Убедиться в работоспособности Web-страницы можно, открыв решение Counter.sln в папке Counter.

Пример 104. Чтение/запись cookie-файлов

Cookie (от англ. cookie— печенье) — это небольшой фрагмент данных (обычно до 4096 байт), созданный Web-сервером и хранимый на компьютере клиента (поль­зователя) в виде файла. Каждый раз при запросе какой-либо страницы сайта браузер пользователя посылает серверу в HTTP-запросе этот cookie-файл. Данные, за­писанные в cookie-файле, обычно используются для аутентификации пользователя, т. е. для его распознавания среди прочих пользователей, для хранения его персо­нальных предпочтений, настроек пользователя, для ведения статистики пользова­телей и проч. В самом начале использования

cookie служило для определения, по­сещал ли пользователь сайт ранее.

Зайдя на любой сайт, вы можете увидеть активные на данном сайте cookies, на­брав в адресной строке браузера следующее: javascript:alert("Cookies: "+document.cookie)

В ответ ваш Web-браузер покажет вам примерно такое окно, как показано на рис. 14.8.



Рис. 14.8. Отображение активного cookie на некотором сайте

В этом окне содержаться те сведения, которые сервер некоторого Web-узла закодировал о вас в cookie-файле, записанном на ваш компьютер.

В данном примере мы научимся читать cookie при загрузке страницы и записывать cookie-файл при нажатии пользователем командной кнопки. То есть постановка задачи следующая. Web-страница предлагает посетителю ввести данные о себе-его имя и род занятий. При нажатии кнопки Запись Cookie введенные в текстовые поля сведения будут записаны в cookie-файл. Этот cookie-файл будет храниться на компьютере пользователя сутки. В течение этих суток, каждый раз вызывая данную страницу, в текстовых полях мы будем видеть введенные нами сведения, кото­рые мы можем тут же исправлять и опять записывать в cookie. Фрагмент функцио­нирования подобной Web-страницы приведен на рис. 14.9.



Рис. 14.9. Фрагмент работы Web-страницы записи cookie

Для реализации поставленной задачи запустим Visual Studio 2010, закажем новый проект из шаблона Empty ASP.NET Web Application, назовем его Cookie. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.

Затем из раздела Standard панели Toolbox перенесем в проектируемую Web-форму две метки Label, два текстовых поля TextBox и командную кнопку Button, содержимое файла программной поддержки WebForm1.aspx.cs приведено в листинге 14.3.

Листинг 14.3. Чтение/запись cookie-файлов

//Чтение/запись cookie-файлов. Web-страница предлагает посетителю ввести данные о себе: имя и род занятий.

//При нажатии кнопки "Запись Cookie" введенные в текстовые поля сведения будут записаны в cookie-файл.

//Этот cookie-файл будет храниться на компьютере пользователя сутки. В течение этих суток, каждый раз вызывая

//данную страницу, в текстовых полях мы будем видеть введенные нами сведения, которые мы можем тут же


//исправлять и опять записывать в cookie

using System;

using System.Web;

//Другие директивы using удалены, поскольку они не используются в данной программе

namespace Cookie

{

public partial class WebForm1 : Systern.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Page.Title = "Введите данные о себе";

// При повторной отправке выйти из процедуры

if (Page.IsPostBack == true) return;

Label1.Text = "Имя посетителя";

Label2.Text = "Род занятий";

Button1.Text = "Запись Cookie";

// ЧТЕНИЕ COOKIE.

// Cookie может быть целая коллекция:

// HttpCookieCollection CookieN;

HttpCookie Cookie1;

// Читаю только один раздел cookie "О посетителе страницы"

Cookie1 = Request.Cookies.Get("О посетителе страницы");

// Если на машине клиента нет такого cookie

if (Cookie1 == null) return;

// Если есть, то заполняю текстовые поля из cookie

TextBox1.Text = Cookie1["Имя посетителя"];

TextBox2.Text = Cookie1["Род занятий посетителя"];

}

protected void Buttonl_Click(object sender, EventArgs e)

{ // ЗАПИСЬ COOKIE.

HttpCookie Cookiel = new HttpCookie("О посетителе страницы");

// Запись двух пар "имя (ключ) - значение"

Cookie1["Имя посетителя"] = TextBox1.Text;

Cookie1["Род занятий посетителя"] = TextBox2.Text;

// Установка даты удаления cookie: сейчас плюс один день

Cookie1.Expires = DateTime.Now.AddDays(1);

// Добавление раздела "О посетителе страницы" в cookie-файл

Response.Cookies.Add(Cookie1);

}

}

}

Здесь во время загрузки страницы Page_Load при isPostBack = false инициализируем надписи на метках Label, а затем читаем cookie-файл посредством объекта класса Request. В данном случае функция Requestookies.Get возвращает раздел соokie-файла "О посетителе страницы". В данной программе мы предусмотрели только один раздел, хотя их может быть несколько (коллекция HttpCookieCollection). Если компьютер пользователя не содержит данного cookie-файла, то программируем выход return из данной процедуры. Если cookie прочитан, то текстовые поля заполняем соответствующими значениями.

При обработке события "щелчок на кнопке" Запись Cookie происходит запись cookie-файл, в его раздел "О посетителе страницы" двух пар "имя—значение" Имя посетителя и Род занятий, скопированных из текстовых полей. В предложении Соokie.Expires указываем срок хранения cookie. Если дата не указана, то cookies удаляются сразу, как только пользователь закроет браузер. Например, интернет-магазин может использовать cookies для хранения названий товаров, которые пользователь выбрал и поместил в виртуальную корзину покупок. В таком случае даже если пользователь закроет браузер, не совершив покупки, то при последующем посещении интернет-магазина ему не придется формировать корзину заново.


Вернемся к нашему программному коду. Оператор Add (Cookie1) объекта Response.cookies добавляет раздел "О посетителе страницы" в cookie-файл. Теперь давайте найдем этот cookie-файл на винчестере вашего компьютера. Различные браузеры для разных операционных систем пишут cookies-файлы в различные папки. Скорее всего, вы найдете данный cookie в папке C:\Documents and Settings\Администратор\Cookies. Структура имени cookie-файла следующая: Имя_пользователя_компьютера@имя_сервера[1]

Поскольку в данном случае речь идет о локальном сервере, то, скорее всего, имя обсуждаемого в данном разделе cookie-файла будет: администратор@lосаlhost[2].txt



Рис. 14.10. Содержимое cookie-файла

Поскольку cookie — это текстовый файл, его можно легко открыть, например, с помошью Блокнота (рис. 14.10).

Как видно, первая строка содержимого cookie-файла — это имя раздела, затем пары "имя—значение", запрограммированные нами в программе, далее имя серве­ра и служебная информация.

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

Убедиться в работоспособности Web-страницы можно, открыв решение Cookie.sln в папке Cookie.

Пример 105. Вывод изображения в Web-форму

Демонстрация изображения в Web-форме является тривиальной задачей. Для ее лешения Visual Studio имеет класс Image пространства имен System.Web.UI.WebControls. С помощью свойства ImageUr1 этого класса задаем URL-адрес изображения, а с помощью AlternateText— альтернативный текст, отображаемый в элементе управления Image, когда изображение недоступно. Не­множко усложним задачу и сформулируем ее так: на странице имеем некоторое изображение, при щелчке мышью на нем изображение увеличивается вдвое без пе­резагрузки Web-страницы.

Сначала решим эту задачу, используя исключительно HTML-разметку с не­большим включением программного кода на JavaScript. Очень удобно выполнить HTML-разметку в редакторе Visual Studio, поэтому запустим систему Visual Studio 2010 и создадим новый проект из шаблона