การเขียนโปรแกรม 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
การกำหนดค่าเซิร์ฟเวอร์เว็บและการสนับสนุน
ก่อนที่จะทำการเขียนโปรแกรม 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 ให้หลายตัวในโมดูลที่ใช้สองต่อไปนี้: