如何在 Perl 的 CGI 中使用 Cookie?


HTTP 協議是一種無狀態協議。但對於商業網站,需要在不同頁面之間維護會話資訊。例如,一個使用者註冊會在跨越多個頁面的交易後結束。但是如何跨所有網頁維護使用者的會話資訊呢?

在許多情況下,使用 Cookie 是記住和跟蹤偏好、購買、佣金以及其他改善訪客體驗或網站統計資訊所需資訊的最有效方法。

工作原理

您的伺服器以 Cookie 的形式向訪客的瀏覽器傳送一些資料。瀏覽器可能會接受 Cookie。如果接受,它將作為純文字記錄儲存在訪客的硬碟驅動器上。現在,當訪客訪問您網站上的另一個頁面時,Cookie 可供檢索。檢索後,您的伺服器就知道/記住儲存的內容。

Cookie 是 5 個可變長度欄位的純文字資料記錄 -

  • **Expires** - Cookie 將過期的日期。如果為空,則 Cookie 將在訪客退出瀏覽器時過期。
  • **Domain** - 您網站的域名。
  • **Path** - 設定 Cookie 的目錄或網頁的路徑。如果您想從任何目錄或頁面檢索 Cookie,則可以為空。
  • **Secure** - 如果此欄位包含單詞“secure”,則 Cookie 只能透過安全伺服器檢索。如果此欄位為空,則不存在此類限制。
  • **Name = Value** - Cookie 以鍵值對的形式設定和檢索。

設定 Cookie

向瀏覽器傳送 Cookie 非常容易。這些 Cookie 將與 HTTP 標頭一起傳送。假設您想將 UserID 和 Password 作為 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....

這裡我們使用 **Set-Cookie** HTTP 標頭來設定 Cookie。可選設定 Cookie 屬性,例如 Expires、Domain 和 Path。需要注意的是,Cookie 在傳送神奇行 **"Content-type:text/html\r\n\r\n"** 之前設定。

檢索 Cookie

檢索所有已設定的 Cookie 非常容易。Cookie 儲存在 CGI 環境變數 HTTP_COOKIE 中,它們將具有以下形式。

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

以下是如何檢索 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";

這將產生以下結果,前提是上述 Cookie 在呼叫檢索 Cookie 指令碼之前已設定。

User ID = XYZ
Password = XYZ123

更新時間: 2019年12月2日

2K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.