2012-03-11 14 views
-2

私は以下のperlスクリプトを持っています。
validCookiesハッシュに含まれていないすべてのCookieを無効にする必要があります。これは私のコードの上部のみであり、残りは@cookieArray()のすべてのクッキーを印刷することを扱っており、それは私のために働くことに注意してください。
正しいクッキーが設定されているので、後でコードで手動で設定する必要があります。 ATMのコードはクッキーを無効にしていません。選択したperlのクッキーを無効にします

use CGI qw(:standard); 
use CGI::Cookie;  


@cookieArray =(); 

#hash of cookie names that should not be set to null 
%validCookies = (cName=> 0, cAddress => 0, cCity => 0, cProvince => 0, cPostalCode => 0, cMail => 0, cDate => 0); 

%cook = CGI::Cookie->fetch; 
foreach $name ($cook){ 
if(exists ($validCookies{$name})){ 

} else { 
    $temp = CGI::Cookie->new(-name=>$name, -value =>""); 
    push(@cookieArray, $temp); 
} 
} 
+1

少なくとも作業の希望がある郵便番号。 foreachは何を繰り返し処理するのでしょうか? –

+0

配列はすべてのクッキーを含む連想配列である%cookに対してループしています。 – user597608

答えて

3

クッキーを無効にするには、それを期限切れにする必要があります。次のコードは、保護されたCookie名を除いてすべて期限切れです。

CGI :: Cookie低レベルインタフェースを使用する必要はありません。すべての機能はすでにcookieメソッドを通じて公開されています。

use strict; 
use warnings FATAL => 'all'; 
use CGI qw(); 
use Data::Dumper qw(Dumper); 

my %protected_names = map { $_ => undef } 
    qw(cName cAddress cCity cProvince cPostalCode cMail cDate); 

my $cgi = CGI->new; 
print $cgi->header(
    -type => 'text/plain', 
    -cookie => [ 
     map { 
      $cgi->cookie(
       -name => $_, 
       -value => (exists($protected_names{$_}) 
        ? $cgi->cookie($_) 
        : q() 
       ), 
      ) 
     } $cgi->cookie 
    ], 
); 
print Dumper [$cgi->cookie]; 
+0

ちょっとdaxim私はあなたのソリューションは動作すると確信していますが、私はまだ後に追加のクッキーを追加する必要があります。私の知る限り、私は一度クッキーを印刷することしかできません。だから私はすべてのクッキーを配列にプッシュしていたのです。私の問題も期限切れではなかった(クッキーはセッションの最後に過ぎない)、クッキーの値をnullに設定するだけでした。 – user597608

+1

**私は**働いています、私は実際に走ってそれをテストしました。私はあなたがしなかったと感じている。 - HTTPヘッダーを作成して送信する 'header'メソッドで一度だけCookieを送信しています。私はまた、送信する前にリストに集めています。それは 'map'のものです。名前付き配列は必要ありません。 - を編集して、期限切れではなく値を空の文字列に設定します。 – daxim

+0

私のためにも働きます。 '%protected_names'にないクッキーはnullに設定されています。 –

関連する問題