Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.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. В данном случае функция Request.Сookies.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 и создадим новый проект из шаблона