Сохранение информации о состоянии в сценариях CGI

sohranenie informacii o sostoyanii v scenariyah cgi Сценарии на стороне сервера

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

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

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

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

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

Приемы на основе адресов URL с параметрами и скрытых полей форм отлично подходят для передачи информации между страницами в течение единственного сеанса работы. Однако некоторые ситуации требуют большего. Например, что если нам потребуется сохранять имя пользователя между сеансами? Или следить за тем, какие страницы пользователь посещал в прошлом? Поскольку такая информация должна храниться дольше, чем длится один сеанс взаимодействия, параметров запроса и скрытых полей формы будет недостаточно. Кроме того, в некоторых случаях объем необходимой информации может оказаться слишком большим, чтобы встраивать его в страницу HTML ответа.

В целом существует множество различных способов передачи или сохранения информации между вызовами сценариев CGI и между сеансами взаимодействий:

Пара метры за про са в стро ке URL

Информация сеанса встраивается в страницы ответа

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий