2012-03-11 3 views
-2

다음 펄 스크립트가 있습니다.
validCookies 해시에없는 모든 쿠키를 무효화해야합니다. 이 코드는 내 코드의 윗부분에 불과하며 나머지는 @cookieArray()에있는 모든 쿠키를 인쇄하는 것으로 처리됩니다.
올바른 쿠키가 설정되어 있으므로 나중에 코드에서 수동으로 설정해야합니다. ATM 코드가 쿠키를 무효화하지 않고있는 이유는 누구입니까?선택한 펄 쿠키를 무효화하십시오.

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

쿠키를 무효화하려면 쿠키를 만료시켜야합니다. 다음 코드는 보호 된 쿠키 이름을 제외하고 모두 만료됩니다.

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' 메소드에서 쿠키를 한 번만 보내고 있습니다. 나는 또한 보내기 전에 목록에서 그것들을 모으고있다. 그것은지도가하는 것이다. 명명 된 배열이 필요 없습니다. - 값을 만료 대신 빈 문자열로 설정하도록 답장을 편집했습니다. – daxim

+0

나를 위해 일한다. '% protected_names'에없는 쿠키는 null로 설정됩니다. –