Cookieを削除する(CGI::Cookie) - Perl,CGI

Cookieを削除するには、単純に有効期限を現在よりも過去に設定してやれば良い。

サンプル

#!/usr/bin/perl
;#
;#Cookie削除
;#

use strict;
use CGI::Cookie;

#-- ヘッダ出力 --#
print delCookie('id');
print "Content-type: text/html\n";
print "\n";

#-- 本文出力 --#
print qq|<html>\n|;
print qq|  <head><title>Cookieテスト</title></head>\n|;
print qq|  <body><h1>Hello World</h1></body>\n|;
print qq|</html>\n|;


#---------------------------------------
#セッションIDをCookieから削除
#---------------------------------------
sub delCookie{
  my $name    = shift || return;          #Cookie名
  my $domain  = shift || 'ichikoro.com';  #取得可能なドメイン
  my $path    = shift || '/';             #取得可能なパス
  
  #-- Cookie値削除 --#
  my $cookie1 = new CGI::Cookie(-name => $name
                , -value   => ''
                , -expires => 'Fri, 5-Oct-1979 08:10:00 GMT'
                , -domain  => $domain
                , -path    => $path
        );

  return("Set-Cookie: $cookie1\n");
}

実行例

Set-Cookie: id=katsube; domain=ichikoro.com; path=/; expires=Fri, 5-Oct-1979 08:10:00 GMT
Content-type: text/html

<html>
<head><title>Cookieテスト</title></head>
<body><h1>Hello World</h1></body>
</html>

注意点としては、『過去』がブラウザ上(パソコン上)の時間に左右される点である。もしもパソコンの時間が1910年などになっていた場合、上記のプログラムは期待通りの結果を得ることが出来ないが、世界中のほとんど、9割以上のユーザーにはこれで対応できるハズだ。

もし厳密にやるのであれば、JavaScriptなどでユーザーのパソコンの時間を取得し、そこから減算をしてやれば良い。そこまでする必要があるかどうかは疑問ではあるが。