Учебники

Учебник по PERL и CGI

Common Gateway Interface, или CGI, представляет собой набор стандартов, определяющих, как происходит обмен информацией между веб-сервером и пользовательским сценарием.

Спецификации CGI в настоящее время поддерживаются NCSA, и NCSA определяет CGI следующим образом:

Common Gateway Interface, или CGI, является стандартом для внешних программ-шлюзов для взаимодействия с информационными серверами, такими как HTTP-серверы.

Текущая версия — CGI / 1.1, а CGI / 1.2 находится в стадии разработки.

Просмотр веб-страниц

Чтобы понять концепцию CGI, давайте посмотрим, что происходит, когда мы нажимаем гиперссылку для просмотра определенной веб-страницы или URL-адреса.

  • Ваш браузер связывается с веб-сервером HTTP и запрашивает URL, т.е. имя файла.

  • Веб-сервер проанализирует URL-адрес и выполнит поиск имени файла, если обнаружит, что этот файл затем отправлен обратно в браузер, в противном случае отправит сообщение об ошибке, указывающее, что вы запросили неправильный файл.

  • Веб-браузер принимает ответ от веб-сервера и отображает либо полученный файл, либо сообщение об ошибке.

Ваш браузер связывается с веб-сервером HTTP и запрашивает URL, т.е. имя файла.

Веб-сервер проанализирует URL-адрес и выполнит поиск имени файла, если обнаружит, что этот файл затем отправлен обратно в браузер, в противном случае отправит сообщение об ошибке, указывающее, что вы запросили неправильный файл.

Веб-браузер принимает ответ от веб-сервера и отображает либо полученный файл, либо сообщение об ошибке.

Однако можно настроить HTTP-сервер таким образом, чтобы при запросе файла в определенном каталоге этот файл не отправлялся обратно; вместо этого он выполняется как программа, и все, что выводит эта программа, отправляется обратно в браузер для отображения. Эта функция называется Common Gateway Interface или CGI, а программы называются CGI-скриптами. Этими CGI-программами могут быть Perl Script, Shell Script, C или C ++ и т. Д.

Диаграмма архитектуры CGI

CGI Архитектура

Поддержка и настройка веб-сервера

Прежде чем приступить к программированию CGI, убедитесь, что ваш веб-сервер поддерживает CGI и настроен на обработку программ CGI. Все программы CGI, выполняемые сервером HTTP, хранятся в предварительно настроенном каталоге. Этот каталог называется CGI Directory и по соглашению называется / cgi-bin. По соглашению файлы PERL CGI будут иметь расширение .cgi .

Первая программа CGI

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<title>Hello Word - First CGI Program</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! This is my first CGI program</h2>';
print '</body>';
print '</html>';

1;

Выход

Hello Word! This is my first CGI program

Заголовок HTTP

Строка Content-type: text / html \ r \ n \ r \ n является частью HTTP-заголовка, который отправляется браузеру для понимания содержимого. Весь заголовок HTTP будет в следующей форме

HTTP Field Name: Field Content

Например

Тип содержимого: text / html \ r \ n \ r \ n

Есть несколько других важных заголовков HTTP, которые вы будете часто использовать в программировании CGI.

S.No. Заголовок и описание
1

Тип содержимого: Строка

Строка MIME, определяющая формат возвращаемого файла. Примером является Content-type: text / html

2

Истекает: Дата Строка

Дата, когда информация становится недействительной. Это должно использоваться браузером, чтобы решить, когда страница должна быть обновлена. Допустимая строка даты должна быть в формате 01 января 1998 12:00:00 по Гринвичу.

3

Расположение: URL-строка

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

4

Последнее изменение: строка

Дата последней модификации ресурса.

5

Длина содержимого: Строка

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

6

Набор Cookie: Строка

Установить куки, пропущенные через строку

Тип содержимого: Строка

Строка MIME, определяющая формат возвращаемого файла. Примером является Content-type: text / html

Истекает: Дата Строка

Дата, когда информация становится недействительной. Это должно использоваться браузером, чтобы решить, когда страница должна быть обновлена. Допустимая строка даты должна быть в формате 01 января 1998 12:00:00 по Гринвичу.

Расположение: URL-строка

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

Последнее изменение: строка

Дата последней модификации ресурса.

Длина содержимого: Строка

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

Набор Cookie: Строка

Установить куки, пропущенные через строку

Переменные среды CGI

Все программы CGI будут иметь доступ к следующим переменным среды. Эти переменные играют важную роль при написании любой CGI-программы.

S.No. Имя и описание переменной
1

ТИП СОДЕРЖИМОГО

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

2

CONTENT_LENGTH

Длина запроса информации. Это доступно только для запросов POST.

3

HTTP_COOKIE

Вернуть установленные куки в виде пары ключ-значение.

4

HTTP_USER_AGENT

Поле заголовка запроса User-Agent содержит информацию о пользовательском агенте, создавшем запрос. Его название веб-браузера.

5

PATH_INFO

Путь для скрипта CGI.

6

СТРОКА ЗАПРОСА

Информация в кодировке URL, отправляемая с запросом метода GET.

7

REMOTE_ADDR

IP-адрес удаленного хоста, отправляющего запрос. Это может быть полезно для регистрации или для аутентификации.

8

УДАЛЕННЫЙ УЗЕЛ

Полное имя хоста, сделавшего запрос. Если эта информация недоступна, тогда REMOTE_ADDR может использоваться для получения IR-адреса.

9

REQUEST_METHOD

Метод, использованный для запроса. Наиболее распространенными методами являются GET и POST.

10

SCRIPT_FILENAME

Полный путь к скрипту CGI.

11

SCRIPT_NAME

Название скрипта CGI.

12

НАЗВАНИЕ СЕРВЕРА

Имя хоста или IP-адрес сервера.

13

SERVER_SOFTWARE

Название и версия программного обеспечения, на котором работает сервер.

ТИП СОДЕРЖИМОГО

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

CONTENT_LENGTH

Длина запроса информации. Это доступно только для запросов POST.

HTTP_COOKIE

Вернуть установленные куки в виде пары ключ-значение.

HTTP_USER_AGENT

Поле заголовка запроса User-Agent содержит информацию о пользовательском агенте, создавшем запрос. Его название веб-браузера.

PATH_INFO

Путь для скрипта CGI.

СТРОКА ЗАПРОСА

Информация в кодировке URL, отправляемая с запросом метода GET.

REMOTE_ADDR

IP-адрес удаленного хоста, отправляющего запрос. Это может быть полезно для регистрации или для аутентификации.

УДАЛЕННЫЙ УЗЕЛ

Полное имя хоста, сделавшего запрос. Если эта информация недоступна, тогда REMOTE_ADDR может использоваться для получения IR-адреса.

REQUEST_METHOD

Метод, использованный для запроса. Наиболее распространенными методами являются GET и POST.

SCRIPT_FILENAME

Полный путь к скрипту CGI.

SCRIPT_NAME

Название скрипта CGI.

НАЗВАНИЕ СЕРВЕРА

Имя хоста или IP-адрес сервера.

SERVER_SOFTWARE

Название и версия программного обеспечения, на котором работает сервер.

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<font size=+1>Environment</font>\n";

foreach (sort keys %ENV) {
   print "<b>$_</b>: $ENV{$_}<br>\n";
}

1;

Выход

Environment CONTEXT_DOCUMENT_ROOT: 
CONTEXT_PREFIX: 
DOCUMENT_ROOT: 
GATEWAY_INTERFACE: 
GEOIP_ADDR: 
GEOIP_CONTINENT_CODE: 
GEOIP_COUNTRY_CODE: 
GEOIP_COUNTRY_NAME: 
HTTP_ACCEPT: 
HTTP_ACCEPT_ENCODING: 
HTTP_ACCEPT_LANGUAGE: 
HTTP_COOKIE: 
HTTP_HOST: 
HTTP_UPGRADE_INSECURE_REQUESTS: 
HTTP_USER_AGENT: 
HTTP_VIA: 
HTTP_X_FORWARDED_FOR: 
HTTP_X_FORWARDED_PROTO: 
HTTP_X_HOST: 
PATH: 
QUERY_STRING: 
REMOTE_ADDR: 
REMOTE_PORT: 
REQUEST_METHOD: 
REQUEST_SCHEME: 
REQUEST_URI: 
SCRIPT_FILENAME: 
SCRIPT_NAME: 
SCRIPT_URI: 
SCRIPT_URL: 
SERVER_ADDR: 
SERVER_ADMIN: 
SERVER_NAME: 
SERVER_PORT: 
SERVER_PROTOCOL: 
SERVER_SIGNATURE: 
SERVER_SOFTWARE: 
UNIQUE_ID: 

Как открыть диалоговое окно «Загрузка файла»?

Иногда желательно, чтобы вы указали опцию, при которой пользователь будет щелкать ссылку, и у него появится диалоговое окно «Загрузка файла» вместо отображения реального содержимого. Это очень просто и будет достигнуто через HTTP-заголовок.

Этот HTTP-заголовок будет отличаться от заголовка, упомянутого в предыдущем разделе.

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

#!/usr/bin/perl

# HTTP Header
print " Content-Type: application/octet-stream; name=\"FileName\"\r\n";
print " Content-Disposition: attachment; filename=\"FileName\"\r\n\n";

# Actual File Content will go hear.
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) ) {
   print("$buffer");
}

GET и POST методы

Вы, должно быть, сталкивались со многими ситуациями, когда вам нужно было передать некоторую информацию из вашего браузера на веб-сервер и, в конечном счете, в вашу программу CGI. Чаще всего браузер использует два метода: два передают эту информацию на веб-сервер. Это методы GET и POST.

Передача информации с использованием метода GET

Метод GET отправляет закодированную информацию пользователя, добавленную к запросу страницы. Страница и закодированная информация разделены знаком? следующий символ — http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2

Метод GET — это метод по умолчанию для передачи информации из браузера на веб-сервер, и он создает длинную строку, которая появляется в поле «Местоположение:» вашего браузера. Никогда не используйте метод GET, если у вас есть пароль или другая конфиденциальная информация для передачи на сервер. Метод GET имеет ограничение по размеру: в строке запроса может быть только 1024 символа.

Эта информация передается с использованием заголовка QUERY_STRING и будет доступна в вашей CGI-программе через переменную среды QUERY_STRING.

Вы можете передавать информацию, просто объединяя пары ключ-значение вместе с любым URL-адресом или используя HTML-теги <FORM> для передачи информации с помощью метода GET.

Пример простого URL: метод Get

Вот простой URL, который передаст два значения программе hello_get.cgi с помощью метода GET.

Ниже приведен скрипт hello_get.cgi для обработки входных данных, данных веб-браузером.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "GET") {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

$first_name = $FORM{first_name};
$last_name  = $FORM{last_name};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Выход

Hello ZARA ALI .....

Пример простой формы: метод GET

Вот простой пример, который передает два значения, используя HTML FORM и кнопку отправки. Мы будем использовать тот же CGI-скрипт hello_get.cgi для обработки этого ввода.

<FORM action = "/cgi-bin/hello_get.cgi" method = "GET">
   First Name: <input type = "text" name = "first_name">  <br>

   Last Name: <input type = "text" name = "last_name">
   <input type = "submit" value = "Submit">
</FORM>

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

First Name:

Last Name:

Передача информации методом POST

Обычно более надежным методом передачи информации в CGI-программу является метод POST. Это упаковывает информацию точно так же, как методы GET, но вместо отправки ее в виде текстовой строки после символа? в URL он отправляет его как отдельное сообщение. Это сообщение поступает в CGI-скрипт в виде стандартного ввода.

Ниже приведен скрипт hello_post.cgi для обработки входных данных, данных веб-браузером. Этот скрипт будет обрабатывать GET, а также метод POST.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

$first_name = $FORM{first_name};
$last_name  = $FORM{last_name};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Давайте снова возьмем тот же пример, что и выше, который передает два значения, используя HTML FORM и кнопку submit. Мы собираемся использовать скрипт CGI hello_post.cgi для обработки этого ввода.

<FORM action = "/cgi-bin/hello_post.cgi" method="POST">
   First Name: <input type="text" name="first_name">  <br>

   Last Name: <input type="text" name="last_name">

   <input type="submit" value="Submit">
</FORM>

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

First Name:

Last Name:

Передача данных флажка в программу CGI

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

Вот пример HTML-кода для формы с двумя флажками

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on"> Maths
   <input type = "checkbox" name = "physics" value = "on"> Physics
   <input type = "submit" value = "Select Subject">
</form>

Результатом этого кода является следующая форма

Maths Physics

Ниже приведен скрипт checkbox.cgi для обработки ввода, заданного веб-браузером для переключателя.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

if( $FORM{maths} ) {
   $maths_flag ="ON";
} else {
   $maths_flag ="OFF";
}

if( $FORM{physics} ) {
   $physics_flag ="ON";
} else {
   $physics_flag ="OFF";
}

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Checkbox - Third CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> CheckBox Maths is : $maths_flag</h2>";
print "<h2> CheckBox Physics is : $physics_flag</h2>";
print "</body>";
print "</html>";

1;

Передача данных переключателей в программу CGI

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

Вот пример HTML-кода для формы с двумя переключателями -

<form action = "/cgi-bin/radiobutton.cgi" method = "POST" target = "_blank">
   <input type = "radio" name = "subject" value = "maths"> Maths
   <input type = "radio" name = "subject" value = "physics"> Physics
   <input type = "submit" value = "Select Subject">
</form>

Результатом этого кода является следующая форма -

Maths Physics

Ниже приведен скрипт radiobutton.cgi для обработки ввода, заданного веб-браузером для переключателя.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

$subject = $FORM{subject};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Radio - Fourth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Передача данных текстовой области в программу CGI

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

Вот пример HTML-кода для формы с полем TEXTAREA -

<form action = "/cgi-bin/textarea.cgi" method = "POST" target = "_blank">
   <textarea name = "textcontent" cols = 40 rows = 4>
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit">
</form>

Результатом этого кода является следующая форма -

Ниже приведен скрипт textarea.cgi для обработки входных данных, данных веб-браузером.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

$text_content = $FORM{textcontent};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Entered Text Content is $text_content</h2>";
print "</body>";
print "</html>";

1;

Передача данных выпадающего списка в программу CGI

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

Вот пример HTML-кода для формы с одним выпадающим списком

<form action = "/cgi-bin/dropdown.cgi" method = "POST" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   <input type = "submit" value = "Submit">
</form>

Результатом этого кода является следующая форма -

Ниже приведен скрипт dropdown.cgi для обработки входных данных, данных веб-браузером.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;

if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}

$subject = $FORM{dropdown};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Dropdown Box - Sixth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Использование Cookies в CGI

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

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

Как это устроено

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

Cookies - это запись данных в виде простого текста из 5 полей переменной длины -

  • Истекает - дата окончания срока действия куки. Если это поле пустое, срок действия файла cookie истечет, когда посетитель выйдет из браузера.

  • Домен - доменное имя вашего сайта.

  • Путь - путь к каталогу или веб-странице, на которой установлен файл cookie. Это может быть пустым, если вы хотите получить куки из любого каталога или страницы.

  • Безопасный - если в этом поле содержится слово «безопасный», тогда cookie может быть получен только с безопасного сервера. Если это поле пустое, такого ограничения не существует.

  • Имя = значение - файлы cookie устанавливаются и пересматриваются в форме пар ключ-значение.

Истекает - дата окончания срока действия куки. Если это поле пустое, срок действия файла cookie истечет, когда посетитель выйдет из браузера.

Домен - доменное имя вашего сайта.

Путь - путь к каталогу или веб-странице, на которой установлен файл cookie. Это может быть пустым, если вы хотите получить куки из любого каталога или страницы.

Безопасный - если в этом поле содержится слово «безопасный», тогда cookie может быть получен только с безопасного сервера. Если это поле пустое, такого ограничения не существует.

Имя = значение - файлы cookie устанавливаются и пересматриваются в форме пар ключ-значение.

Настройка Cookies

Это очень легко отправить куки в браузер. Эти куки будут отправлены вместе с заголовком HTTP. Предполагая, что вы хотите установить идентификатор пользователя и пароль в качестве файлов cookie. Так будет сделано следующим образом -

#!/usr/bin/perl

print "Set-Cookie:UserID=XYZ;\n";
print "Set-Cookie:Password=XYZ123;\n";
print "Set-Cookie:Expires=Tuesday, 31-Dec-2007 23:12:40 GMT";\n";
print "Set-Cookie:Domain=www.tutorialspoint.com;\n";
print "Set-Cookie:Path=/perl;\n";
print "Content-type:text/html\r\n\r\n";
...........Rest of the HTML Content....

Из этого примера вы должны понимать, как устанавливать куки. Мы используем HTTP-заголовок Set-Cookie для установки файлов cookie.

Здесь необязательно устанавливать атрибуты cookie, такие как Expires, Domain и Path. Примечательно, что куки устанавливаются перед отправкой волшебной строки "Content-type: text / html \ r \ n \ r \ n .

Получение куки

Это очень легко восстановить все установленные куки. Файлы cookie хранятся в переменной среды CGI HTTP_COOKIE и имеют следующую форму.

key1=value1;key2=value2;key3=value3....

Вот пример того, как получить куки.

#!/usr/bin/perl
$rcvd_cookies = $ENV{'HTTP_COOKIE'};
@cookies = split /;/, $rcvd_cookies;

foreach $cookie ( @cookies ) {
   ($key, $val) = split(/=/, $cookie); # splits on the first =.
   $key =~ s/^\s+//;
   $val =~ s/^\s+//;
   $key =~ s/\s+$//;
   $val =~ s/\s+$//;
	
   if( $key eq "UserID" ) {
      $user_id = $val;
   } elsif($key eq "Password") {
      $password = $val;
   }
}

print "User ID  = $user_id\n";
print "Password = $password\n";

This will produce following result
User ID = XYZ
Password = XYZ123

CGI Модули и Библиотеки

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

Модуль CGI

Беркли cgi-lib.pl