Общий интерфейс шлюза, или 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-каталогом и по соглашению называется / cgi-bin. По соглашению файлы Perl CGI будут иметь расширение .cgi .
Первая программа CGI
Вот простая ссылка, которая связана с CGI-скриптом, который называется hello.cgi . Этот файл хранится в каталоге / cgi-bin / и содержит следующее содержимое. Перед запуском программы CGI убедитесь, что у вас есть режим изменения файла, используя команду UNIX chmod 755 hello.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.cgi, то запрос отправляется на веб-сервер, который ищет hello.cgi в каталоге / cgi-bin, выполняет его, и какой бы результат не был сгенерирован, веб-сервер отправляет этот результат обратно в веб-браузер, что выглядит следующим образом —
Hello Word! This is my first CGI program
Этот сценарий hello.cgi представляет собой простой сценарий Perl, который записывает свой вывод в файл STDOUT, то есть на экран. Существует одна важная и дополнительная функция, которая должна быть напечатана в первой строке. Тип содержимого: text / html \ r \ n \ r \ n . Эта строка отправляется обратно в браузер и указывает тип контента, который будет отображаться на экране браузера. Теперь вы должны понимать основную концепцию CGI, и вы можете написать множество сложных CGI-программ на Perl. Этот скрипт может взаимодействовать с любой другой внешней системой также для обмена информацией, такой как база данных, веб-сервисы или любые другие сложные интерфейсы.
Понимание заголовка HTTP
Самая первая строка Content-type: text / html \ r \ n \ r \ n является частью заголовка HTTP, который отправляется браузеру, чтобы браузер мог понимать входящий контент со стороны сервера. Весь заголовок HTTP будет в следующей форме —
HTTP Field Name: Field Content
Например —
Content-type: text/html\r\n\r\n
Есть несколько других важных заголовков HTTP, которые вы будете часто использовать в программировании CGI.
Sr.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-программы.
Sr.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
Название и версия программного обеспечения, на котором работает сервер.
Вот небольшая программа CGI, в которой перечислены все переменные CGI, поддерживаемые вашим веб-сервером. Нажмите на эту ссылку, чтобы увидеть результат Получить среду
#!/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;
Поднять диалоговое окно «Загрузка файла»?
Иногда желательно, чтобы вы указали опцию, в которой пользователь щелкает ссылку, и вместо всплывающего окна отображается всплывающее диалоговое окно «Загрузка файла». Это очень просто и будет достигнуто через 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 отправляет закодированную информацию о пользователе, добавленную к самому URL страницы. Страница и закодированная информация разделены знаком? персонаж следующим образом —
http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2
Метод GET является методом по умолчанию для передачи информации из браузера на веб-сервер, и он создает длинную строку, которая появляется в поле «Местоположение:» вашего браузера. Вы никогда не должны использовать метод GET, если у вас есть пароль или другая конфиденциальная информация для передачи на сервер. Метод GET имеет ограничение по размеру: в строку запроса можно передать только 1024 символа.
Эта информация передается с использованием заголовка QUERY_STRING и будет доступна в вашей CGI-программе через переменную среды QUERY_STRING, которую вы можете анализировать и использовать в вашей CGI-программе.
Вы можете передавать информацию, просто объединяя пары ключ-значение с любым URL-адресом или используя HTML-теги <FORM> для передачи информации, используя метод GET.
Пример простого URL: метод Get
Вот простой URL, который передаст два значения программе hello_get.cgi с помощью метода GET.
http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI
Ниже приведен скрипт 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;
Пример простой формы: метод 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>
Вот фактический результат вышеприведенного кодирования формы. Теперь вы можете ввести имя и фамилию, а затем нажать кнопку «Отправить», чтобы увидеть результат.
Передача информации с использованием метода POST
Более надежным методом передачи информации в CGI-программу является метод POST . Это упаковывает информацию точно так же, как методы GET, но вместо отправки ее в виде текстовой строки после символа ? в URL он отправляет его как отдельное сообщение как часть заголовка HTTP. Веб-сервер предоставляет это сообщение сценарию 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>
Вот фактический результат вышеприведенного кодирования формы. Вы вводите Имя и Фамилию и затем нажимаете кнопку отправки, чтобы увидеть результат.
Передача данных флажка в программу 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>
Результатом этого кода является следующая форма —
Ниже приведен скрипт 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>
Результатом этого кода является следующая форма —
Ниже приведен скрипт 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 goes here....
Здесь мы использовали 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";
Это даст следующий результат, при условии, что вышеупомянутые куки были установлены до вызова сценария поисковых куки.
User ID = XYZ Password = XYZ123
CGI Модули и Библиотеки
Вы найдете много встроенных модулей через Интернет, которые предоставляют вам прямые функции для использования в вашей программе CGI. Ниже приведены важные когда-то.