Latest web development tutorials

การเขียนโปรแกรม Perl CGI

CGI คืออะไร

CGI การบำรุงรักษาในขณะนี้โดย NCSA, NCSA CGI ถูกกำหนดไว้ดังต่อไปนี้:

CGI (Common Gateway Interface) Common Gateway Interface ซึ่งเป็นโปรแกรมที่ทำงานบนเซิร์ฟเวอร์เช่นเซิร์ฟเวอร์ HTTP ติดต่อลูกค้าให้หน้า HTML เดียวกัน


การท่องเว็บ

เพื่อทำความเข้าใจวิธี CGI ทำงานเราสามารถคลิกที่ลิงค์บนหน้าเว็บหรือ URL ของกระบวนการ:

  • 1 ใช้เบราว์เซอร์ของคุณเพื่อเข้าถึง URL และเชื่อมต่อไปยังเว็บเซิร์ฟเวอร์ HTTP
  • 2 เว็บเซิร์ฟเวอร์ได้รับข้อความร้องขอจะถูกแยก URL และมองไฟล์เข้าถึงได้บนเซิร์ฟเวอร์ถ้ามีถ้ามีจะกลับเนื้อหาของแฟ้มมิฉะนั้นก็จะส่งกลับข้อผิดพลาด
  • 3, เบราว์เซอร์ได้รับข้อมูลจากเซิร์ฟเวอร์และแสดงไฟล์ที่ได้รับหรือข้อความผิดพลาด

โปรแกรม CGI สามารถสคริปต์ Python สคริปต์ PERL, เชลล์สคริปต์, C หรือ C ++ โปรแกรม


แผนภูมิ CGI

cgiarch


การกำหนดค่าเซิร์ฟเวอร์เว็บและการสนับสนุน

ก่อนที่จะทำการเขียนโปรแกรม CGI, ให้แน่ใจว่าเว็บเซิร์ฟเวอร์ของคุณได้รับการกำหนดค่าให้สนับสนุน CGI และ CGI จัดการ

Apache สนับสนุนการกำหนดค่า CGI:

ตั้งค่าไดเรกทอรี CGI นี้:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

เซิร์ฟเวอร์ HTTP ทั้งหมดที่จะรันโปรแกรม CGI จะถูกเก็บไว้ในไดเรกทอรีที่กำหนดไว้ล่วงหน้า ไดเรกทอรีนี้เรียกว่าไดเรกทอรี CGI และโดยการประชุมมันเป็นชื่อ / var / www / directory cgi-bin

CGI .cgi นามสกุลไฟล์, Perl ยังสามารถใช้นามสกุล .pl

โดยค่าเริ่มต้นการกำหนดค่าเซิร์ฟเวอร์ Linux ทำงานไดเรกทอรี cgi-bin เป็น / var / www

หากคุณต้องการที่จะระบุไดเรกทอรีที่แตกต่างกันเพื่อเรียกใช้สคริปต์ CGI, คุณสามารถปรับเปลี่ยนการตั้งค่าไฟล์ httpd.conf ดังต่อไปนี้:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
</Directory>

เพิ่มคำต่อท้าย .pl AddHandler เพื่อให้เราสามารถเข้าถึงจุดสิ้นสุดของ .pl ไฟล์สคริปต์ Perl นี้:

AddHandler cgi-script .cgi .pl .py

โปรแกรม CGI แรก

ด้านล่างเราจะสร้างไฟล์ test.cgi ให้รหัสเป็นดังนี้:

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! </h2>';
print '<p>来自本教程第一个 CGI 程序。</p>';
print '</body>';
print '</html>';

1;

จากนั้นเปิดเบราว์เซอร์ของคุณเพื่อ http: //localhost/cgi-bin/test.cgi ผลการส่งออกมีดังนี้

การส่งออกของบรรทัดแรกของสคริปต์ "Content-Type: text / html \ r \ n \ r \ n" ถูกส่งไปยังเบราว์เซอร์และบอกเบราว์เซอร์เพื่อแสดงประเภทของเนื้อหา "text / html"


หัว HTTP

เนื้อหาของแฟ้ม test.cgi ใน: ส่วนหนึ่งของหัว HTTP คือ "ชนิดของเนื้อหา text / html" ก็จะถูกส่งไปยังชนิดเนื้อหาของเบราว์เซอร์บอกไฟล์เบราว์เซอร์

รูปแบบหัว HTTP จะเป็นดังนี้:

HTTP 字段名: 字段内容

ตัวอย่างเช่น:

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

ตารางต่อไปนี้อธิบายข้อมูลในโปรแกรม CGI หัว HTTP มักจะมีการใช้

หัว ลักษณะ
ชนิดของเนื้อหา: นิติบุคคล MIME ที่สอดคล้องกับการร้องขอข้อมูล ตัวอย่างเช่น Content-Type: text / html
หมดอายุ: วัน วันที่และเวลาการตอบสนองหมดอายุ
ตำแหน่งที่ตั้ง: URL เมื่อต้องการเปลี่ยนเส้นทางผู้รับคำขอ URL ที่ไม่ตั้งให้เสร็จสมบูรณ์คำขอหรือบัตรประจำตัวของทรัพยากรใหม่
วันที่: วันที่แก้ไขล่าสุด ทรัพยากรที่ร้องขอแก้ไขล่าสุด
ความยาวของเนื้อหา: ยังไม่มี ร้องขอความยาวของเนื้อหา
คุกกี้ชุด: String การตั้งค่า http คุกกี้

ตัวแปร CGI สิ่งแวดล้อม

โปรแกรม CGI ทั้งหมดได้รับตัวแปรสภาพแวดล้อมต่อไปนี้ซึ่งมีบทบาทสำคัญในโปรแกรม CGI:

ชื่อตัวแปร ลักษณะ
CONTENT_TYPE ค่านี้ระบุว่าตัวแปรสภาพแวดล้อมประเภท MIME ของการถ่ายโอนข้อมูล ในปัจจุบันตัวแปรสภาพแวดล้อมโดยทั่วไป CONTENT_TYPE: application / x-www ฟอร์ม urlencoded เขากล่าวว่าข้อมูลจากรูปแบบ HTML ได้
CONTENT_LENGTH ถ้าเซิร์ฟเวอร์โหมดการถ่ายโอนและโปรแกรม CGI ข้อมูลที่โพสต์ถึงแม้ว่าสภาพแวดล้อมตัวแปร STDIN จำนวนไบต์ที่สามารถอ่านได้ข้อมูลที่ถูกต้องจากมาตรฐาน ตัวแปรสภาพแวดล้อมนี้เมื่ออ่านข้อมูลของท่านจะต้องใช้
HTTP_COOKIE เนื้อหาภายใน COOKIE ลูกค้า
HTTP_USER_AGENT รวมถึงการให้ข้อมูลหมายเลขรุ่นของเบราว์เซอร์ของลูกค้าหรือข้อมูลที่เป็นกรรมสิทธิ์อื่น ๆ
PATH_INFO ค่าของตัวแปรสภาพแวดล้อมเช่นนี้แสดงให้เห็นชื่อของโปรแกรม CGI ทันทีหลังจากที่ข้อมูลเส้นทางเพิ่มเติม มันมักจะปรากฏเป็นโปรแกรม CGI อาร์กิวเมนต์
QUERY_STRING ถ้าเซิร์ฟเวอร์โหมดการถ่ายโอนและโปรแกรม CGI ข้อมูลที่เป็นข้อมูลที่ได้รับค่าของตัวแปรสภาพแวดล้อมนี้แม้ว่าผ่าน ข้อมูลนี้จะตามด้วยชื่อของโปรแกรม CGI ทั้งในตรงกลางที่มีเครื่องหมายคำถาม "?" คั่น
REMOTE_ADDR ค่าของตัวแปรสภาพแวดล้อมเช่นนี้เป็นที่อยู่ IP ของลูกค้าส่งคำขอเช่น 192.168.1.67 ดังกล่าวข้างต้น ค่านี้เป็นปัจจุบันอยู่เสมอ และมันก็เป็นความต้องการที่จะให้ลูกค้าเว็บเพื่อระบุเฉพาะเว็บเซิร์ฟเวอร์ที่สามารถนำมาใช้ในโปรแกรม CGI ที่จะแยกแยะระหว่างเว็บไคลเอ็นต์ที่แตกต่างกัน
REMOTE_HOST ค่าของตัวแปรสภาพแวดล้อมนี้มีชื่อโฮสต์ของลูกค้าร้องขอของซีจี ถ้ามันไม่ได้คุณต้องการตรวจสอบคุณไม่จำเป็นต้องกำหนดตัวแปรสภาพแวดล้อมเช่นนี้
REQUEST_METHOD มันมีวิธีการที่เรียกว่าสคริปต์ สำหรับสคริปต์ / 1.0 โปรโตคอล HTTP เพียง แต่ได้รับการโพสต์และมีความหมาย
SCRIPT_FILENAME เส้นทางแบบเต็มไปสคริปต์ CGI
สคริปต์ ชื่อของสคริปต์ซีจี
SERVER_NAME นี้เป็นชื่อโฮสต์นามแฝงหรือที่อยู่ IP ของเซิร์ฟเวอร์เว็บของคุณ
SERVER_SOFTWARE ค่าของตัวแปรสภาพแวดล้อมนี้ประกอบด้วยชื่อโปรแกรมโทร CGI และหมายเลขรุ่นของเซิร์ฟเวอร์ HTTP ยกตัวอย่างเช่นค่าข้างต้นของ Apache / 2.2.14 (Unix)

นี่คือสคริปต์ CGI CGI ตัวแปรสภาพแวดล้อมการส่งออกง่าย:

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print '<meta charset="utf-8">';
print "<font size=+1>环境变量:</font>\n";
foreach (sort keys %ENV)
{
  print "<b>$_</b>: $ENV{$_}<br>\n";
}

1;

ดาวน์โหลด

ถ้าเราต้องการที่จะบรรลุถึงการดาวน์โหลดไฟล์ Perl CGI, จำเป็นต้องมีชุดที่แตกต่างกันของข้อมูลส่วนหัวดังต่อไปนี้:

#!/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 การถ่ายโอนข้อมูล

มีวิธีการในการส่งข้อมูลของผู้ใช้ไปยังเซิร์ฟเวอร์เข้ารหัสข้อมูลข้อมูลที่มีอยู่ใน URL ของหน้าขอไปยังหมายเลขที่แบ่งออกเป็นดังนี้ "?":

http://www.test.com/cgi-bin/test.cgi?key1=value1&key2=value2
ได้รับการร้องขอเกี่ยวกับบางส่วนของความคิดเห็นอื่น ๆ :
  • คำขอ GET สามารถเก็บไว้
  • ร้องขอ GET ยังคงอยู่ในประวัติของเบราว์เซอร์
  • GET หน้าสามารถบุ๊คมาร์ค
  • GET หน้าไม่ควรใช้เมื่อต้องรับมือกับข้อมูลที่สำคัญ
  • ได้รับการร้องขอมีข้อ จำกัด ระยะเวลา
  • GET หน้าควรจะใช้ในการดึงข้อมูล

ตัวอย่างของ URL แบบง่าย: มีวิธีการ

ต่อไปนี้เป็น URL ที่เรียบง่ายโดยใช้วิธีการจะได้รับการส่งสองพารามิเตอร์ในการเขียนโปรแกรม test.cgi:

/cgi-bin/test.cgi?name=本教程&url=http://www.w3big.com

แฟ้มรหัส test.cgi:

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取文本信息
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "GET")
{
   $buffer = $ENV{'QUERY_STRING'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$name = $FORM{name};
$url  = $FORM{url};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2>$name网址:$url</h2>";
print "</body>";
print "</html>";

1;

ตรวจสอบเบราว์เซอร์ของคุณผลการส่งออกมีดังนี้

ตัวอย่างของรูปแบบที่เรียบง่าย: มีวิธีการ

ต่อไปนี้เป็นสองส่งข้อมูลไปยังเซิร์ฟเวอร์โดยใช้วิธีการ GET โดยใช้แบบฟอร์ม HTML มีส่งเอกสาร test.cgi สคริปต์เซิร์ฟเวอร์เดียวกันรหัส test.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="get">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:


ใช้วิธีการโพสต์เพื่อส่งผ่านข้อมูล

โดยใช้วิธีการโพสต์เพื่อส่งผ่านข้อมูลไปยังเซิร์ฟเวอร์ที่มีความปลอดภัยมากขึ้นและมีความน่าเชื่อถือเป็นบางข้อมูลที่สำคัญเช่นรหัสผ่านผู้ใช้จำเป็นต้องใช้โพสต์ในการถ่ายโอนข้อมูล

ต่อไปนี้เป็นยัง test.cgi ก็ยังสามารถจัดการกับข้อมูล POST แบบฟอร์มที่ส่งมาจากเบราว์เซอร์:

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取文本信息
$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'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$name = $FORM{name};
$url  = $FORM{url};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2>$name网址:$url</h2>";
print "</body>";
print "</html>";

1;

ต่อไปนี้เป็นสองส่งข้อมูลไปยังเซิร์ฟเวอร์โดยใช้วิธีการ GET โดยใช้แบบฟอร์ม HTML มีส่งเอกสาร test.cgi สคริปต์เซิร์ฟเวอร์เดียวกันรหัส test.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="post">
站点名称: <input type="text" name="name">  <br />

站点 URL: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:

โปรแกรม CGI เพื่อส่งผ่านข้อมูลผ่านช่อง

ช่องทำเครื่องหมายที่ใช้ในการส่งหนึ่งหรือมากกว่าตัวเลือกข้อมูลรหัส test.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="POST" target="_blank">
<input type="checkbox" name="w3big" value="on" /> 本教程
<input type="checkbox" name="google" value="on" /> Google
<input type="submit" value="选择站点" />
</form>
</body>
</html>

แฟ้มรหัส test.cgi:

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取信息
$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'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
if( $FORM{w3big} ){
   $w3big_flag ="ON";
}else{
   $w3big_flag ="OFF";
}
if( $FORM{google} ){
   $google_flag ="ON";
}else{
   $google_flag ="OFF";
}

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2> 本教程选中状态 : $w3big_flag</h2>";
print "<h2> Google 选择状态 : $google_flag</h2>";
print "</body>";
print "</html>";

1;

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:


การถ่ายโอนข้อมูลผ่านทางวิทยุโปรแกรม CGI

วิทยุเพียงการถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์รหัส test.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="post" target="_blank">
<input type="radio" name="site" value="w3big" /> 本教程
<input type="radio" name="site" value="google" /> Google
<input type="submit" value="提交" />
</form>
</body>
</html>

รหัสสคริปต์ test.cgi เป็นดังนี้:

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取信息
$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'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$site = $FORM{site};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2> 选择的网站 $site</h2>";
print "</body>";
print "</html>";

1;

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:


การถ่ายโอนข้อมูล textarea ผ่านโปรแกรม CGI

textarea ผ่านหลายแถวของข้อมูลไปยังเซิร์ฟเวอร์รหัส test.html เป็นดังนี้:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="post" target="_blank">
<textarea name="textcontent" cols="40" rows="4">
在这里输入内容...
</textarea>
<input type="submit" value="提交" />
</form>
</body>
</html>

รหัสสคริปต์ test.cgi เป็นดังนี้:

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取信息
$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'};
}
# 读取 name/value 对信息
@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 '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2>输入的文本内容为:$text_content</h2>";
print "</body>";
print "</html>";

1;

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:


โปรแกรม CGI เพื่อส่งผ่านข้อมูลผ่านแบบเลื่อนลง

HTML code กล่องแบบหล่นลงดังนี้

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="/cgi-bin/test.cgi" method="post" target="_blank">
<select name="dropdown">
<option value="w3big" selected>本教程</option>
<option value="google">Google</option>
</select>
<input type="submit" value="提交"/>
</form>
</body>
</html>

รหัสสคริปต์ test.cgi ดังนี้

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# 读取信息
$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'};
}
# 读取 name/value 对信息
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
   ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value;
}
$site = $FORM{dropdown};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print '<meta charset="utf-8">';
print '<title>本教程(w3big.com)</title>';
print "</head>";
print "<body>";
print "<h2>选择的网站是:$site</h2>";
print "</body>";
print "</html>";

1;

การใช้งานเบราว์เซอร์ของผลจะเป็นดังนี้:


CGI จะใช้คุกกี้

โปรโตคอล HTTP ในอุปสรรคใหญ่เป็นความผิดที่จะตัดสินตัวตนของผู้ใช้ที่ให้โปรแกรมเมอร์จัดการที่ดีของความไม่สะดวก แต่ดูเหมือนฟังก์ชันคุกกี้ทำขึ้นสำหรับการขาดนี้

คุกกี้ที่กำลังเข้าถึงสคริปต์ในขณะที่ลูกค้าผ่านเบราว์เซอร์ของลูกค้าบนฮาร์ดดิสก์ของลูกค้าที่จะเขียนบันทึกข้อมูลการดึงข้อมูลเมื่อมีลูกค้าเยี่ยมชมสคริปต์ต่อไปเพื่อให้บรรลุฟังก์ชั่นของการกำหนดตัวตนคุกกี้ที่ใช้กันทั่วไปในการตรวจสอบตัวตน

ไวยากรณ์คุกกี้

คุกกี้ HTTP จะถูกส่งผ่านหัว HTTP เพื่อให้บรรลุเขามีการถ่ายโอนไฟล์ไวยากรณ์หัวตั้งคุกกี้จะเป็นดังนี้:

Set-cookie:name=name;expires=date;path=path;domain=domain;secure 
  • name = ชื่อ: กำหนดค่าของคุกกี้ (ชื่อไม่สามารถใช้ ";" และ "," จำนวน) เมื่อมีค่าหลายชื่อ ";" ที่จะแยกตัวอย่างเช่น: name1 = name1; name2 = name2 ; NAME3 = NAME3
  • หมดอายุ = วันที่: คุกกี้วันหมดอายุในรูปแบบ: หมดอายุ = "Wdy, DD- จันทร์-YYYY HH: MM: SS"
  • เส้นทาง = เส้นทาง: เส้นทางการตั้งค่าการสนับสนุนคุกกี้ถ้าเส้นทางเป็นเส้นทางคุกกี้สำหรับไฟล์และไดเรกทอรีย่อยทั้งหมดของรายการไดเรกทอรีมีผลบังคับใช้เช่น: เส้นทาง = "/ cgi-bin /" ถ้าเส้นทางไฟล์คุกกี้ มันหมายถึงการมีผลใช้บังคับของไฟล์นี้ตัวอย่างเช่น: เส้นทาง = "/ cgi-bin / cookie.cgi"
  • โดเมน = โดเมน: ชื่อโดเมนของคุกกี้ที่ถูกต้องตัวอย่างเช่น: โดเมน = "www.w3big.com"
  • การรักษาความปลอดภัย: ถ้าธงนี้จะได้รับว่าคุกกี้เท่านั้นที่สามารถส่งผ่านเซิร์ฟเวอร์ SSL โปรโตคอล HTTPS
  • คุกกี้จะได้รับโดยการตั้งค่าตัวแปรสภาพแวดล้อม HTTP_COOKIE ประสบความสำเร็จโปรแกรม CGI สามารถขอรับข้อมูลโดยเรียกตัวแปรคุกกี้

การตั้งค่าคุกกี้

การตั้งค่าคุกกี้ง่ายมากคุกกี้จะถูกส่งไปที่แยกหัว HTTP ตัวอย่างต่อไปนี้กำหนดหมายเลขผู้ใช้รหัสผ่านและจะหมดอายุในคุกกี้:

#!/usr/bin/perl

print "Set-Cookie:UserID=XYZ;\n";
print "Set-Cookie:Password=XYZ123;\n";
print "Set-Cookie:Expires=Tuesday, 31-Dec-2017 23:12:40 GMT";\n";
print "Set-Cookie:Domain=www.w3big.com;\n";
print "Set-Cookie:Path=/perl;\n";
print "Content-type:text/html\r\n\r\n";
...........其他 HTML 内容

ค้นหาคุกกี้

คุกกี้หน้าการดึงข้อมูลเป็นเรื่องง่ายมากใน CGI ตัวแปรสภาพแวดล้อม HTTP_COOKIE, รูปแบบการจัดเก็บข้อมูลเป็นดังนี้ข้อมูลคุกกี้จะถูกจัดเก็บ:

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

Perl CGI ให้หลายตัวในโมดูลที่ใช้สองต่อไปนี้: