Perl - Lập trình CGI
CGI là gì?
Giao diện cổng chung, hay CGI, là một tập hợp các tiêu chuẩn xác định cách thông tin được trao đổi giữa máy chủ web và tập lệnh tùy chỉnh.
Các thông số kỹ thuật CGI hiện được duy trì bởi NCSA và NCSA định nghĩa CGI như sau:
Giao diện cổng thông thường, hoặc CGI, là một tiêu chuẩn cho các chương trình cổng bên ngoài để giao tiếp với máy chủ thông tin như máy chủ HTTP.
Phiên bản hiện tại là CGI / 1.1 và CGI / 1.2 đang được hoàn thiện.
Duyệt web
Để hiểu khái niệm về CGI, hãy xem điều gì sẽ xảy ra khi chúng ta nhấp vào một siêu liên kết có sẵn trên một trang web để duyệt qua một trang web hoặc URL cụ thể.
Trình duyệt của bạn liên hệ với máy chủ web bằng giao thức HTTP và yêu cầu URL, tức là tên tệp trang web.
Máy chủ Web sẽ kiểm tra URL và sẽ tìm tên tệp được yêu cầu. Nếu máy chủ web tìm thấy tệp đó thì nó sẽ gửi tệp đó trở lại trình duyệt mà không cần thực hiện gì thêm, nếu không sẽ gửi thông báo lỗi cho biết rằng bạn đã yêu cầu một tệp sai.
Trình duyệt web nhận phản hồi từ máy chủ web và hiển thị nội dung tệp đã nhận hoặc thông báo lỗi trong trường hợp không tìm thấy tệp.
Tuy nhiên, có thể thiết lập máy chủ HTTP theo cách sao cho bất cứ khi nào tệp trong một thư mục nhất định được yêu cầu, tệp đó sẽ không được gửi lại; thay vào đó, nó được thực thi như một chương trình và bất kỳ kết quả nào mà chương trình đó xuất ra, đều được gửi lại để trình duyệt của bạn hiển thị. Điều này có thể được thực hiện bằng cách sử dụng một chức năng đặc biệt có sẵn trong máy chủ web và nó được gọi làCommon Gateway Interfacehoặc CGI và các chương trình như vậy được thực thi bởi máy chủ để tạo ra kết quả cuối cùng, được gọi là tập lệnh CGI. Các chương trình CGI này có thể là PERL Script, Shell Script, chương trình C hoặc C ++, v.v.
Sơ đồ kiến trúc CGI
Hỗ trợ và cấu hình máy chủ web
Trước khi bạn tiến hành Lập trình CGI, hãy đảm bảo rằng Máy chủ Web của bạn hỗ trợ chức năng CGI và nó được cấu hình để xử lý các chương trình CGI. Tất cả các chương trình CGI được thực thi bởi máy chủ web được lưu giữ trong một thư mục được cấu hình trước. Thư mục này được gọi là thư mục CGI và theo quy ước, nó được đặt tên là / cgi-bin. Theo quy ước, các tệp Perl CGI sẽ có mở rộng là.cgi.
Chương trình CGI đầu tiên
Đây là một liên kết đơn giản được liên kết với tập lệnh CGI có tên hello.cgi . Tệp này đã được giữ trong/cgi-bin/thư mục và nó có nội dung sau. Trước khi chạy chương trình CGI, hãy đảm bảo rằng bạn đã thay đổi chế độ tệp bằng cách sử dụngchmod 755 hello.cgi Lệnh UNIX.
#!/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;
Bây giờ nếu bạn nhấp vào hello.cgi liên kết sau đó yêu cầu chuyển đến máy chủ web tìm kiếm hello.cgi trong thư mục / cgi-bin, thực thi nó và bất kỳ kết quả nào được tạo ra, máy chủ web sẽ gửi kết quả đó trở lại trình duyệt web, như sau:
Hello Word! This is my first CGI program
Tập lệnh hello.cgi này là một tập lệnh Perl đơn giản đang ghi đầu ra của nó trên tệp STDOUT, tức là màn hình. Có một tính năng quan trọng và bổ sung có sẵn đó là dòng đầu tiên được inContent-type:text/html\r\n\r\n. Dòng này được gửi trở lại trình duyệt và chỉ định loại nội dung sẽ hiển thị trên màn hình trình duyệt. Bây giờ bạn phải có khái niệm cơ bản về CGI và bạn có thể viết nhiều chương trình CGI phức tạp bằng Perl. Tập lệnh này có thể tương tác với bất kỳ hệ thống thực thi nào khác cũng để trao đổi thông tin như cơ sở dữ liệu, dịch vụ web hoặc bất kỳ giao diện phức tạp nào khác.
Hiểu tiêu đề HTTP
Dòng đầu tiên Content-type:text/html\r\n\r\nlà một phần của tiêu đề HTTP, được gửi đến trình duyệt để trình duyệt có thể hiểu nội dung đến từ phía máy chủ. Tất cả tiêu đề HTTP sẽ ở dạng sau:
HTTP Field Name: Field Content
Ví dụ -
Content-type:text/html\r\n\r\n
Có một số tiêu đề HTTP quan trọng khác mà bạn sẽ sử dụng thường xuyên trong Lập trình CGI của mình.
Sr.No. | Tiêu đề & Mô tả |
---|---|
1 | Content-type: String Một chuỗi MIME xác định định dạng của nội dung được trả về. Ví dụ là Content-type: text / html |
2 | Expires: Date String Ngày mà thông tin trở nên không hợp lệ. Điều này sẽ được trình duyệt sử dụng để quyết định khi nào một trang cần được làm mới. Chuỗi ngày hợp lệ phải có định dạng 01/01/1998 12:00:00 GMT. |
3 | Location: URL String URL sẽ được trả lại thay vì URL được yêu cầu. Bạn có thể sử dụng tệp này để chuyển hướng yêu cầu đến bất kỳ vị trí nào khác. |
4 | Last-modified: String Ngày sửa đổi cuối cùng của tệp. |
5 | Content-length: String Độ dài, tính bằng byte, của dữ liệu được trả về. Trình duyệt sử dụng giá trị này để báo cáo thời gian tải xuống ước tính cho một tệp. |
6 | Set-Cookie: String Đặt cookie được chuyển qua chuỗi |
Biến môi trường CGI
Tất cả chương trình CGI sẽ có quyền truy cập vào các biến môi trường sau. Các biến này đóng một vai trò quan trọng trong khi viết bất kỳ chương trình CGI nào.
Sr.No. | Tên và mô tả biến |
---|---|
1 | CONTENT_TYPE Kiểu dữ liệu của nội dung. Được sử dụng khi máy khách đang gửi nội dung đính kèm đến máy chủ. Ví dụ: tải lên tệp, v.v. |
2 | CONTENT_LENGTH Độ dài của thông tin truy vấn. Nó chỉ có sẵn cho các yêu cầu ĐĂNG |
3 | HTTP_COOKIE Trả về các cookie đã đặt ở dạng cặp khóa & giá trị. |
4 | HTTP_USER_AGENT Trường tiêu đề yêu cầu Tác nhân người dùng chứa thông tin về tác nhân người dùng bắt nguồn yêu cầu. Tên của trình duyệt web. |
5 | PATH_INFO Đường dẫn cho tập lệnh CGI. |
6 | QUERY_STRING Thông tin mã hóa URL được gửi với yêu cầu phương thức GET. |
7 | REMOTE_ADDR Địa chỉ IP của máy chủ từ xa thực hiện yêu cầu. Điều này có thể hữu ích cho việc ghi nhật ký hoặc cho mục đích xác thực. |
số 8 | REMOTE_HOST Tên đầy đủ đủ điều kiện của máy chủ thực hiện yêu cầu. Nếu thông tin này không có sẵn thì REMOTE_ADDR có thể được sử dụng để lấy địa chỉ IR. |
9 | REQUEST_METHOD Phương pháp được sử dụng để thực hiện yêu cầu. Các phương pháp phổ biến nhất là GET và POST. |
10 | SCRIPT_FILENAME Đường dẫn đầy đủ đến tập lệnh CGI. |
11 | SCRIPT_NAME Tên của tập lệnh CGI. |
12 | SERVER_NAME Tên máy chủ hoặc Địa chỉ IP của máy chủ. |
13 | SERVER_SOFTWARE Tên và phiên bản của phần mềm mà máy chủ đang chạy. |
Đây là một chương trình CGI nhỏ để liệt kê tất cả các biến CGI được hỗ trợ bởi máy chủ Web của bạn. Nhấp vào liên kết này để xem kết quả Nhận môi trường
#!/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;
Tăng Hộp thoại "Tải xuống Tệp"?
Đôi khi bạn muốn cung cấp tùy chọn trong đó người dùng sẽ nhấp vào liên kết và nó sẽ bật lên hộp thoại "Tải xuống tệp" cho người dùng thay vì hiển thị nội dung thực tế. Điều này rất dễ dàng và sẽ được thực hiện thông qua tiêu đề HTTP.
Tiêu đề HTTP này sẽ khác với tiêu đề được đề cập trong phần trước. Ví dụ: nếu bạn muốn tạoFileName tệp có thể tải xuống từ một liên kết nhất định thì cú pháp của nó sẽ như sau:
#!/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");
}
Phương thức GET và POST
Chắc hẳn bạn đã gặp nhiều tình huống khi bạn cần chuyển một số thông tin từ trình duyệt của mình đến máy chủ web và cuối cùng là Chương trình CGI xử lý các yêu cầu của bạn. Thông thường nhất, trình duyệt sử dụng hai phương pháp để chuyển thông tin này đến máy chủ web. Các phương pháp này làGET Phương pháp và POSTPhương pháp. Hãy kiểm tra từng cái một.
Truyền thông tin bằng phương pháp GET
Phương thức GET gửi thông tin người dùng đã mã hóa được thêm vào chính URL trang. Trang và thông tin được mã hóa được phân tách bằng dấu? nhân vật như sau -
http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2
Phương thức GET là phương thức defualt để truyền thông tin từ trình duyệt đến máy chủ web và nó tạo ra một chuỗi dài xuất hiện trong hộp Location: của trình duyệt của bạn. Bạn không bao giờ nên sử dụng phương thức GET nếu bạn có mật khẩu hoặc thông tin nhạy cảm khác để chuyển đến máy chủ. Phương thức GET có giới hạn về kích thước: chỉ có thể chuyển 1024 ký tự trong một chuỗi yêu cầu.
Thông tin này được chuyển bằng cách sử dụng QUERY_STRING tiêu đề và sẽ có thể truy cập được trong Chương trình CGI của bạn thông qua biến môi trường QUERY_STRING mà bạn có thể phân tích cú pháp và sử dụng trong chương trình CGI của mình.
Bạn có thể chuyển thông tin bằng cách chỉ cần nối các cặp khóa và giá trị cùng với bất kỳ URL nào hoặc bạn có thể sử dụng thẻ HTML <FORM> để chuyển thông tin bằng phương thức GET.
Ví dụ về URL đơn giản: Phương thức lấy
Đây là một URL đơn giản sẽ chuyển hai giá trị đến chương trình hello_get.cgi bằng phương thức GET.
http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALIDưới là hello_get.cgi script để xử lý đầu vào do trình duyệt web cung cấp.
#!/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;
MẪU đơn giản Ví dụ: Phương pháp GET
Đây là một ví dụ đơn giản, chuyển hai giá trị bằng HTML FORM và nút gửi. Chúng tôi sẽ sử dụng cùng một tập lệnh CGI hello_get.cgi để xử lý đầu vào này.
<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>
Đây là đầu ra thực tế của mã hóa biểu mẫu ở trên. Bây giờ bạn có thể nhập Họ và Tên rồi nhấn nút gửi để xem kết quả.
Truyền thông tin bằng phương pháp POST
Một phương pháp đáng tin cậy hơn để chuyển thông tin đến chương trình CGI là POSTphương pháp. Điều này đóng gói thông tin theo cách chính xác như các phương thức GET, nhưng thay vì gửi nó dưới dạng chuỗi văn bản sau?trong URL, nó sẽ gửi nó dưới dạng một thông điệp riêng biệt như một phần của tiêu đề HTTP. Máy chủ web cung cấp thông báo này cho tập lệnh CGI dưới dạng đầu vào chuẩn.
Dưới đây là sửa đổi hello_post.cgiscript để xử lý đầu vào do trình duyệt web cung cấp. Tập lệnh này sẽ xử lý GET cũng như phương thức 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;
Hãy để chúng tôi thực hiện lại bài kiểm tra tương tự như trên, chuyển hai giá trị bằng HTML FORM và nút gửi. Chúng tôi sẽ sử dụng tập lệnh CGI hello_post.cgi để xử lý đầu vào này.
<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>
Đây là kết quả thực tế của việc mã hóa biểu mẫu trên, Bạn nhập Họ và Tên rồi nhấn nút gửi để xem kết quả.
Chuyển dữ liệu hộp kiểm sang chương trình CGI
Hộp kiểm được sử dụng khi bắt buộc phải chọn nhiều tùy chọn. Đây là một mã HTML mẫu cho một biểu mẫu có hai hộp kiểm.
<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>
Kết quả của mã này là dạng sau:
Dưới là checkbox.cgi script để xử lý đầu vào do trình duyệt web cung cấp cho nút radio.
#!/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;
Chuyển dữ liệu nút radio sang chương trình CGI
Các nút Radio được sử dụng khi chỉ cần chọn một tùy chọn. Đây là mã HTML mẫu cho biểu mẫu có hai nút radio -
<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>
Kết quả của mã này là dạng sau:
Dưới là radiobutton.cgi script để xử lý đầu vào do trình duyệt web cung cấp cho nút radio.
#!/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;
Chuyển dữ liệu vùng văn bản sang chương trình CGI
Phần tử textarea được sử dụng khi văn bản nhiều dòng phải được chuyển đến Chương trình CGI. Đây là mã HTML mẫu cho biểu mẫu có hộp 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>
Kết quả của mã này là dạng sau:
Dưới đây là textarea.cgi script để xử lý đầu vào do trình duyệt web cung cấp.
#!/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;
Chuyển dữ liệu hộp thả xuống cho chương trình CGI
Hộp thả xuống được sử dụng khi chúng ta có nhiều tùy chọn nhưng chỉ một hoặc hai tùy chọn được chọn. Đây là mã HTML mẫu cho biểu mẫu có một hộp thả xuống
<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>
Kết quả của mã này là dạng sau:
Dưới đây là dropdown.cgi script để xử lý đầu vào do trình duyệt web cung cấp.
#!/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;
Sử dụng Cookie trong CGI
Giao thức HTTP là một giao thức không trạng thái. Nhưng đối với một trang web thương mại, cần phải duy trì thông tin phiên giữa các trang khác nhau. Ví dụ: một đăng ký người dùng kết thúc sau khi các giao dịch kéo dài qua nhiều trang. Nhưng làm thế nào để duy trì thông tin phiên của người dùng trên tất cả các trang web?
Trong nhiều tình huống, sử dụng cookie là phương pháp hiệu quả nhất để ghi nhớ và theo dõi các sở thích, mua hàng, hoa hồng và các thông tin khác cần thiết để có trải nghiệm khách truy cập hoặc thống kê trang web tốt hơn.
Làm thế nào nó hoạt động
Máy chủ của bạn gửi một số dữ liệu đến trình duyệt của khách truy cập dưới dạng cookie. Trình duyệt có thể chấp nhận cookie. Nếu có, nó sẽ được lưu trữ dưới dạng bản ghi văn bản thuần túy trên ổ cứng của khách truy cập. Bây giờ, khi khách truy cập đến một trang khác trên trang web của bạn, cookie sẽ có sẵn để truy xuất. Sau khi được truy xuất, máy chủ của bạn biết / ghi nhớ những gì đã được lưu trữ.
Cookie là một bản ghi dữ liệu văn bản thuần túy gồm 5 trường có độ dài thay đổi -
Expires- Ngày cookie sẽ hết hạn. Nếu ô này trống, cookie sẽ hết hạn khi khách truy cập thoát khỏi trình duyệt.
Domain - Tên miền của trang web của bạn.
Path- Đường dẫn đến thư mục hoặc trang web đặt cookie. Điều này có thể để trống nếu bạn muốn lấy cookie từ bất kỳ thư mục hoặc trang nào.
Secure- Nếu trường này chứa từ "an toàn" thì cookie chỉ có thể được truy xuất bằng máy chủ bảo mật. Nếu trường này trống, không có hạn chế như vậy tồn tại.
Name = Value - Cookie được thiết lập và xem xét lại dưới dạng các cặp khóa và giá trị.
Thiết lập Cookie
Rất dễ dàng để gửi cookie đến trình duyệt. Các cookie này sẽ được gửi cùng với HTTP Header. Giả sử bạn muốn đặt UserID và Mật khẩu làm cookie. Vì vậy, nó sẽ được thực hiện như sau:
#!/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....
Ở đây chúng tôi đã sử dụng Set-CookieTiêu đề HTTP để đặt cookie. Bạn có thể tùy chọn đặt các thuộc tính cookie như Expires, Domain và Path. Điều quan trọng cần lưu ý là cookie được đặt trước khi gửi dòng ma thuật"Content-type:text/html\r\n\r\n.
Truy xuất Cookie
Rất dễ dàng để truy xuất tất cả các cookie đã đặt. Cookie được lưu trữ trong biến môi trường CGI HTTP_COOKIE và chúng sẽ có dạng sau.
key1 = value1;key2 = value2;key3 = value3....
Đây là một ví dụ về cách truy xuất 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";
Điều này sẽ tạo ra kết quả sau, với điều kiện các cookie trên đã được thiết lập trước khi gọi tập lệnh cookie truy xuất.
User ID = XYZ
Password = XYZ123
Thư viện và Mô-đun CGI
Bạn sẽ tìm thấy nhiều mô-đun tích hợp trên internet, cung cấp cho bạn các chức năng trực tiếp để sử dụng trong chương trình CGI của bạn. Sau đây là một lần quan trọng.
Mô-đun CGI
Berkeley cgi-lib.pl