Опубликован: 25.09.2008 | Доступ: свободный | Студентов: 3223 / 516 | Оценка: 4.32 / 3.98 | Длительность: 18:50:00
ISBN: 978-5-94774-991-5
Лекция 4:

Основы Web-программирования с использованием ASP.NET

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Использование строки запроса

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

Этот подход очень часто применяется в поисковых системах. Например, вот как выглядят URL наиболее популярных поисковых систем при поиске строки "Web design":

Поисковая система Yandex http://www.yandex.ru/yandsearch?text=Web+design

Поисковая система Rambler http://www.rambler.ru/srch?words=Web+design

Поисковая система Google http://www.google.ru/search?hl=ru&newwindow=1&q=Web+design&lr=

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

Для передачи информации в строке запроса, ее (информацию) необходимо поместить в URL-адрес страницы, к которой должен произойти переход. Это можно сделать используя элемент управления HyperLink, либо воспользовавшись оператором Response.Redirect().

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

String FirstName="Иван";
String LastName="Иванов";
Response.Redirect("login.aspx?username="+FirstName+" "+LastName);

Для передачи нескольких параметров в строке запроса параметры необходимо разделять знаком амперсанд - "&". С учетом этого предыдущий пример можно переделать так, чтобы имя и фамилия пользователя передавались отдельно. Для этого изменим строку Response.Redirect следующим образом:

Response.Redirect("login.aspx?firstname="+FirstName+"&lastname=
 "+LastName);

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

string FN=Request.QueryString["firstname"];
string LN=Request.QueryString["lastname"];

При использовании строки запроса следует помнить, что она передается всегда в открытом виде, поэтому является очень уязвимой. Для защиты информации, передаваемой в строке запроса, можно применять шифрование. Подробнее об этом можно узнать в [ 1 ] .

Объекты Response и Request

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

Browser Определение номера версии запрашивающего браузера, возможность поддержки им файлов cookie и другой служебной информации.
ClientCertificates Аутентификация клиента.
Cookies Получение файлов cookie от клиента.
Files Получение файлов, передаваемых клиентом.
InputStream Чтение и запись переданного запроса в виде неструктурированных данных.

Одной из наиболее часто используемых возможностей объектов Request и Response является работа с файлами cookie. Файлы cookie являются одним из возможных механизмов сохранения информации во время работы приложения для ее дальнейшего использования. Эти файлы сохраняются на жестком диске компьютера клиента. Преимуществом cookie является то, что они работают автоматически, пользователь же при этом даже не знает, что какая-то информация должна быть сохранена. Файлы могут храниться достаточно долго, что обеспечивает возможность передачи информации между посещениями. Файлы cookie могут хранить только простую строковую информацию, а за счет того, что они сохраняются на жестком диске компьютера, пользователь может легко найти соответствующий файл и легко прочитать его содержимое. Таким образом, cookie присущи те же недостатки, что и строке запроса, поэтому не рекомендуется использовать такого рода механизм для сохранения сложной или секретной информации, а также при необходимости сохранения большого объема данных.

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

if (!IsPostBack)
  if (Request.Browser.Cookies)
 Response.Write("Ваш Браузер поддерживает cookies");
  else
 Response.Write("Ваш Браузер не поддерживает cookies");

Для определения типа браузера клиента полезно воспользоваться свойством Browser объекта Request. Данный код выводит в окне браузера его тип.

Response.Write("Ваш браузер - "+Request.Browser.Browser);

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

Ниже приведен перечень свойств и методов объекта Response.

Cashe Определяет кэширование откликов перед отправкой их клиенту.
Cookies Позволяет задавать содержимое файлов cookie, передаваемых клиенту.
Output Позволяет читать и записывать неструктурированные данные, возвращаемые клиенту в виде отклика.

В следующем примере при наличии в браузере поддержки создается cookie UserName, которому присваивается значение "Иванов Иван".

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
    if (Request.Browser.Cookies)
      if (Request.Cookies["UserName"] != null)
      {
        Session["User"] = Request.Cookies["UserName"].Value;
        Response.Write(Request.Cookies["UserName"].Value);
      }
      else
      {
      HttpCookie uname = new HttpCookie("UserName");
      uname.Value = "Иванов Иван";
      Response.Cookies.Add(uname);
      }
    else
      Response.Write("Ваш Браузер не поддерживает cookies");
}

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

uname.Expires=DateTime.Now.AddYears(1);

При необходимости удаления cookie нужно установить для него "просроченную" дату истечения срока действия. Это можно сделать следующим образом:

uname.Expires=DateTime.Now.AddDays(-1);

Краткие итоги

Способы взаимодействия программного кода с интерфейсными элементами управления ASP.NET аналогичны таковым при разработке классических Windows-приложений. При генерации HTML-кода страницы ASP.NET элементы управления преобразуются в теги HTML. Элементы управления, используемые для отображения данных на Web-странице, могут размещаться на странице как путем перетаскивания с панели Toolbox, так и динамическим способом в процессе работы приложения. При этом возможно создание обработчиков событий таких элементов управления с использованием делегатов.

Любые элементы управления, размещаемые на странице, помещаются в контейнер, роль которого выполняет страница приложения, представленная в ASP.NET классом Page. С помощью данного класса можно получить доступ к большому количеству объектов, используемых для управления страницами Web-приложения. В силу специфики работы интернет-приложений существуют определенные сложности организации обработки информации. Эти сложности связаны с тем, что после генерации кода HTML и отправки его клиенту экземпляр формы, расположенный на сервере, уничтожается, следовательно, уничтожаются и данные элементов управления, содержащихся внутри этой формы. Для того чтобы сохранять значения элементов управления между обращениями к странице, необходимо использовать коллекции ViewState, объекты Session или Application.

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

Для обмена информацией между браузером клиента и сервером существуют объекты Response и Request. Одной из наиболее часто используемых возможностей этих объектов является работа с файлами cookie. Эти файлы сохраняются на жестком диске клиента и могут задействоваться для сохранения данных между сеансами работы с Web-приложением. Однако в силу слабой защищенности информации, сохраняемой в файлах cookie, не рекомендуется использовать их для хранения сложноструктурированной или секретной информации.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >