Perl - CGI Programlama

CGI nedir?

  • Ortak Ağ Geçidi Arayüzü veya CGI, bilgilerin web sunucusu ile özel bir komut dosyası arasında nasıl değiş tokuş edildiğini tanımlayan bir dizi standarttır.

  • CGI özellikleri şu anda NCSA tarafından korunmaktadır ve NCSA, CGI'yi aşağıdaki gibi tanımlar -

  • Ortak Ağ Geçidi Arayüzü veya CGI, harici ağ geçidi programlarının HTTP sunucuları gibi bilgi sunucularıyla arayüz oluşturması için bir standarttır.

  • Mevcut sürüm CGI / 1.1'dir ve CGI / 1.2 devam etmektedir.

Web Tarama

CGI kavramını anlamak için, belirli bir web sayfasına veya URL'ye göz atmak için bir web sayfasında bulunan bir hiper bağlantıya tıkladığımızda ne olduğunu görelim.

  • Tarayıcınız HTTP protokolünü kullanarak web sunucusuyla bağlantı kurar ve URL için talepte bulunur, yani web sayfası dosya adı.

  • Web Sunucusu URL'yi kontrol edecek ve istenen dosya adını arayacaktır. Web sunucusu bu dosyayı bulursa, başka bir yürütme yapmadan dosyayı tarayıcıya geri gönderir, aksi takdirde yanlış bir dosya talep ettiğinizi belirten bir hata mesajı gönderir.

  • Web tarayıcısı, web sunucusundan yanıt alır ve alınan dosya içeriğini veya dosyanın bulunamaması durumunda bir hata mesajı görüntüler.

Bununla birlikte, HTTP sunucusunu, belirli bir dizindeki bir dosya istendiğinde bu dosya geri gönderilmeyecek şekilde ayarlamak mümkündür; bunun yerine bir program olarak yürütülür ve sonuç olarak o programın çıktısı ne olursa olsun, tarayıcınızın görüntülemesi için geri gönderilir. Bu, web sunucusunda bulunan özel bir işlev kullanılarak yapılabilir ve bunaCommon Gateway Interfaceveya CGI ve nihai sonucu üretmek için sunucu tarafından yürütülen bu tür programlara CGI betikleri denir. Bu CGI programları bir PERL Script, Shell Script, C veya C ++ programı vb. Olabilir.

CGI Mimari Diyagramı

Web Sunucusu Desteği ve Yapılandırması

CGI Programlamaya geçmeden önce, Web Sunucunuzun CGI işlevselliğini desteklediğinden ve CGI programlarını işleyecek şekilde yapılandırıldığından emin olun. Web sunucusu tarafından yürütülecek tüm CGI programları önceden yapılandırılmış bir dizinde tutulur. Bu dizine CGI dizini adı verilir ve geleneksel olarak / cgi-bin olarak adlandırılır. Geleneksel olarak Perl CGI dosyalarının uzantısı şu şekilde olacaktır:.cgi.

İlk CGI Programı

Burada, merhaba.cgi adlı bir CGI betiğine bağlı basit bir bağlantı var . Bu dosya saklandı/cgi-bin/dizin ve aşağıdaki içeriğe sahiptir. CGI programınızı çalıştırmadan önce, dosya modunu değiştirdiğinizden emin olun.chmod 755 hello.cgi UNIX komutu.

#!/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;

Şimdi tıklarsan hello.cgi bağlantı daha sonra istek, / cgi-bin dizininde hello.cgi'yi arayan, çalıştıran ve sonuç ne olursa olsun, web sunucusu bu sonucu web tarayıcısına geri gönderir, bu da aşağıdaki gibidir -

Hello Word! This is my first CGI program

Bu merhaba.cgi betiği, çıktısını STDOUT dosyasına yani ekrana yazan basit bir Perl betiğidir. Basılacak ilk satır olan önemli ve ekstra bir özellik mevcuttur.Content-type:text/html\r\n\r\n. Bu satır tarayıcıya geri gönderilir ve tarayıcı ekranında görüntülenecek içerik türünü belirtir. Artık temel CGI kavramını anlamış olmalısınız ve Perl kullanarak birçok karmaşık CGI programı yazabilirsiniz. Bu komut dosyası, bir veritabanı, web hizmetleri veya diğer karmaşık arayüzler gibi bilgi alışverişinde bulunmak için herhangi bir başka uygulama sistemiyle etkileşime girebilir.

HTTP Üstbilgisini Anlamak

İlk satır Content-type:text/html\r\n\r\ntarayıcının gelen içeriği sunucu tarafından anlayabilmesi için tarayıcıya gönderilen HTTP başlığının bir parçasıdır. Tüm HTTP üstbilgileri aşağıdaki biçimde olacaktır -

HTTP Field Name: Field Content

Örneğin -

Content-type:text/html\r\n\r\n

CGI Programlamanızda sıklıkla kullanacağınız birkaç önemli HTTP başlığı vardır.

Sr.No. Üstbilgi ve Açıklama
1

Content-type: String

Döndürülen içeriğin biçimini tanımlayan bir MIME dizesi. Örnek, İçerik türü: metin / html

2

Expires: Date String

Bilginin geçersiz hale geldiği tarih. Bu, bir sayfanın ne zaman yenilenmesi gerektiğine karar vermek için tarayıcı tarafından kullanılmalıdır. Geçerli bir tarih dizesi 01 Ocak 1998 12:00:00 GMT biçiminde olmalıdır.

3

Location: URL String

İstenen URL yerine döndürülmesi gereken URL. Bir isteği başka bir yere yeniden yönlendirmek için bunu dosyalanmış olarak kullanabilirsiniz.

4

Last-modified: String

Dosyanın son değiştirilme tarihi.

5

Content-length: String

Döndürülen verilerin bayt cinsinden uzunluğu. Tarayıcı, bir dosyanın tahmini indirme süresini bildirmek için bu değeri kullanır.

6

Set-Cookie: String

Geçirilir çerez ayarla dize

CGI Ortam Değişkenleri

Tüm CGI programı aşağıdaki ortam değişkenlerine erişime sahip olacaktır. Bu değişkenler, herhangi bir CGI programını yazarken önemli bir rol oynar.

Sr.No. Değişkenler İsimler ve Açıklama
1

CONTENT_TYPE

İçeriğin veri türü. İstemci, sunucuya ekli içerik gönderirken kullanılır. Örneğin dosya yükleme vb.

2

CONTENT_LENGTH

Sorgu bilgilerinin uzunluğu. Yalnızca POST istekleri için kullanılabilir

3

HTTP_COOKIE

Ayarlanan çerezleri anahtar ve değer çifti biçiminde döndürür.

4

HTTP_USER_AGENT

User-Agent istek başlığı alanı, isteği başlatan kullanıcı aracısı hakkında bilgi içerir. Web tarayıcısının adı.

5

PATH_INFO

CGI komut dosyasının yolu.

6

QUERY_STRING

GET yöntemi isteği ile gönderilen URL kodlu bilgiler.

7

REMOTE_ADDR

İstekte bulunan uzak ana bilgisayarın IP adresi. Bu, günlük kaydı için veya kimlik doğrulama amacıyla yararlı olabilir.

8

REMOTE_HOST

İstekte bulunan ana bilgisayarın tam nitelikli adı. Bu bilgi mevcut değilse, IR adresini almak için REMOTE_ADDR kullanılabilir.

9

REQUEST_METHOD

İsteği yapmak için kullanılan yöntem. En yaygın yöntemler GET ve POST'tur.

10

SCRIPT_FILENAME

CGI betiğinin tam yolu.

11

SCRIPT_NAME

CGI komut dosyasının adı.

12

SERVER_NAME

Sunucunun ana bilgisayar adı veya IP Adresi.

13

SERVER_SOFTWARE

Sunucunun çalıştırdığı yazılımın adı ve sürümü.

Web sunucunuz tarafından desteklenen tüm CGI değişkenlerini listelemek için küçük bir CGI programı. Get Environment sonucunu görmek için bu bağlantıyı tıklayın

#!/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;

"Dosya İndirme" İletişim Kutusu Yükseltilsin mi?

Bazen, bir kullanıcının bir bağlantıyı tıklatacağı ve gerçek içeriği görüntülemek yerine kullanıcıya bir "Dosya İndirme" iletişim kutusu açacağı bir seçenek vermeniz istenir. Bu çok kolaydır ve HTTP başlığı ile elde edilecektir.

Bu HTTP başlığı, önceki bölümde bahsedilen başlıktan farklı olacaktır. Örneğin, birFileName dosya belirli bir bağlantıdan indirilebilirse, sözdizimi aşağıdaki gibi olacaktır -

#!/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 ve POST Yöntemleri

Bazı bilgileri tarayıcınızdan web sunucusuna ve nihayetinde isteklerinizi ele alan CGI Programınıza aktarmanız gerektiğinde birçok durumla karşılaşmış olmalısınız. Çoğu zaman tarayıcı, bu bilgiyi web sunucusuna iletmek için iki yöntem kullanır. Bu yöntemlerGET Yöntem ve POSTYöntem. Tek tek kontrol edelim.

GET Yöntemini Kullanarak Bilgi Aktarma

GET yöntemi, sayfa URL'sinin kendisine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfa ve kodlanmış bilgiler,? aşağıdaki gibi karakter -

http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2

GET yöntemi, bir tarayıcıdan web sunucusuna bilgi iletmek için varsayılan yöntemdir ve tarayıcınızın Konum: kutusunda görünen uzun bir dize üretir. Sunucuya iletmek için parolanız veya diğer hassas bilgileriniz varsa asla GET yöntemini kullanmamalısınız. GET yönteminin boyut sınırlaması vardır: bir istek dizesinde yalnızca 1024 karakter iletilebilir.

Bu bilgiler kullanılarak geçirilir QUERY_STRING başlığı ve CGI programınızda ayrıştırıp kullanabileceğiniz QUERY_STRING ortam değişkeni aracılığıyla CGI Programınızda erişilebilir olacaktır.

Bilgileri herhangi bir URL ile birlikte anahtar ve değer çiftlerini birleştirerek iletebilir veya GET yöntemini kullanarak bilgileri iletmek için HTML <FORM> etiketlerini kullanabilirsiniz.

Basit URL Örneği: Alma Yöntemi

İşte GET yöntemini kullanarak hello_get.cgi programına iki değer iletecek basit bir URL.

http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI

Aşağıda hello_get.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/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;

Basit FORM Örneği: GET Yöntemi

HTML FORM'u ve gönder düğmesini kullanarak iki değer ileten basit bir örnek. Bu girdiyi işlemek için aynı CGI betiğini hello_get.cgi kullanacağız.

<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>

İşte yukarıdaki form kodlamasının gerçek çıktısı. Şimdi Adı ve Soyadı girebilir ve sonucu görmek için gönder düğmesine tıklayabilirsiniz.

POST Yöntemini Kullanarak Bilgi Aktarma

Bir CGI programına bilgi aktarmanın daha güvenilir bir yöntemi, POSTyöntem. Bu, bilgileri GET yöntemleriyle tamamen aynı şekilde paketler, ancak bunu bir metin dizesi olarak göndermek yerine?URL'de, bunu HTTP başlığının bir parçası olarak ayrı bir mesaj olarak gönderir. Web sunucusu, bu mesajı CGI betiğine standart girdi biçiminde sağlar.

Aşağıda değiştirilmiş hello_post.cgiweb tarayıcısı tarafından verilen girişi işlemek için komut dosyası. Bu komut dosyası GET ve POST yöntemini işleyecektir.

#!/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 ve gönder düğmesini kullanarak iki değeri geçen yukarıdaki sınava tekrar girelim. Bu girdiyi işlemek için CGI betiğini hello_post.cgi kullanacağız.

<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>

İşte yukarıdaki form kodlamasının gerçek çıktısı, Adı ve Soyadı girip sonucu görmek için gönder düğmesine tıklayın.

Onay Kutusu Verilerini CGI Programına Aktarma

Onay kutuları, birden fazla seçeneğin seçilmesi gerektiğinde kullanılır. İki onay kutusu olan bir form için örnek bir HTML kodu aşağıda verilmiştir.

<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>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda checkbox.cgi radyo düğmesi için web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/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;

Radyo Düğmesi Verilerini CGI Programına Aktarma

Radyo Düğmeleri, yalnızca bir seçeneğin seçilmesi gerektiğinde kullanılır. İki radyo düğmesi olan bir form için örnek bir HTML kodu:

<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>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda radiobutton.cgi radyo düğmesi için web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/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;

Metin Alanı Verilerini CGI Programına Aktarma

Çok satırlı metnin CGI Programına aktarılması gerektiğinde bir metin alanı öğesi kullanılır. TEXTAREA kutusu içeren bir form için örnek bir HTML kodu:

<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>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda textarea.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/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;

Açılır Kutu Verilerini CGI Programına Aktarma

Birçok seçeneğimiz olduğunda açılır kutu kullanılır, ancak yalnızca bir veya iki tanesi seçilecektir. Bir açılır kutuya sahip bir form için örnek HTML kodu

<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>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda dropdown.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/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;

CGI'da Çerez Kullanımı

HTTP protokolü, durum bilgisi olmayan bir protokoldür. Ancak ticari bir web sitesi için oturum bilgilerinin farklı sayfalar arasında tutulması gerekir. Örneğin, birçok sayfaya yayılan işlemlerden sonra bir kullanıcı kaydı sona erer. Ancak tüm web sayfalarında kullanıcının oturum bilgilerini nasıl koruyabilirim?

Çoğu durumda, çerezlerin kullanılması tercihleri, satın alımları, komisyonları ve daha iyi ziyaretçi deneyimi veya site istatistikleri için gereken diğer bilgileri hatırlamanın ve izlemenin en etkili yöntemidir.

Nasıl çalışır

Sunucunuz bazı verileri ziyaretçinin tarayıcısına çerez şeklinde gönderir. Tarayıcı çerezi kabul edebilir. Varsa, ziyaretçinin sabit diskinde düz metin kaydı olarak saklanır. Şimdi, ziyaretçi sitenizdeki başka bir sayfaya geldiğinde, çerez geri alınabilir. Alındıktan sonra, sunucunuz neyin depolandığını bilir / hatırlar.

Çerezler, 5 değişken uzunluklu alanın düz metin veri kaydıdır -

  • Expires- Çerezin süresinin dolacağı tarih. Bu boşsa, çerez, ziyaretçi tarayıcıdan çıktığında sona erecektir.

  • Domain - Sitenizin alan adı.

  • Path- Tanımlama bilgisini ayarlayan dizinin veya web sayfasının yolu. Çerezi herhangi bir dizinden veya sayfadan almak istiyorsanız bu boş olabilir.

  • Secure- Bu alan "güvenli" kelimesini içeriyorsa, tanımlama bilgisi yalnızca güvenli bir sunucu ile alınabilir. Bu alan boşsa, böyle bir kısıtlama yoktur.

  • Name = Value - Çerezler, anahtar ve değer çiftleri şeklinde ayarlanır ve yeniden incelenir.

Çerezleri Kurmak

Çerezleri tarayıcıya göndermek çok kolaydır. Bu çerezler, HTTP Başlığı ile birlikte gönderilecektir. Kullanıcı Kimliği ve Parolayı tanımlama bilgileri olarak ayarlamak istediğinizi varsayarsak. Yani şu şekilde yapılacaktır -

#!/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....

Burada kullandık Set-CookieÇerezleri ayarlamak için HTTP başlığı. Expires, Domain ve Path gibi çerez özelliklerini ayarlamak isteğe bağlıdır. Çerezlerin sihirli hat göndermeden önce ayarlandığını unutmamak önemlidir."Content-type:text/html\r\n\r\n.

Çerezleri Alma

Tüm ayarlanan çerezleri geri almak çok kolaydır. Çerezler, CGI ortam değişkeni HTTP_COOKIE'de saklanır ve aşağıdaki biçime sahip olacaklardır.

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

Çerezlerin nasıl alınacağına dair bir örnek.

#!/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";

Bu, yukarıdaki tanımlama bilgilerinin geri alma tanımlama komut dosyası çağrılmadan önce ayarlanmış olması koşuluyla aşağıdaki sonucu üretecektir.

User ID = XYZ
Password = XYZ123

CGI Modülleri ve Kitaplıkları

İnternet üzerinden CGI programınızda doğrudan işlevler sağlayan birçok yerleşik modül bulacaksınız. Aşağıdakiler bir kez önemlidir.

  • CGI Modülü

  • Berkeley cgi-lib.pl