2012-03-11 2 views
-2

У меня есть следующий скрипт perl.
Мне нужно, чтобы аннулировать все файлы cookie, которые не находятся в кеше validCookies. Обратите внимание, что это только верхняя часть моего кода, а остальные - печать всех файлов cookie в @cookieArray(), и это работает для меня.
Поскольку правильные файлы cookie устанавливаются, которые мне нужно установить вручную позже в коде. ATM, код не отменяет файлы cookie, кто-нибудь видит, почему?Недействительные выбранные cookie 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

Почтовый индекс, который имеет хотя бы надежду на работу. Что это за то, что вы собираетесь перебирать? –

+0

Массив циклически перебирает% cook, который является ассоциативным массивом со всеми файлами cookie. – user597608

ответ

3

Чтобы аннулировать файл cookie, вы должны его закончить. Следующий код заканчивает все, кроме защищенных имен файлов 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

Привет, даксим. Я уверен, что ваше решение будет работать, но мне все равно придется добавлять больше файлов cookie. Насколько мне известно, я могу только распечатать файлы cookie один раз. Вот почему я нажимал все куки в массив. Моя проблема также не заключалась в истечении срока действия (куки-файлы только для сеанса), мне нужно было установить значение в файлах cookie равным null. – user597608

+1

It ** делает ** работа, я фактически побежал и протестировал его. У меня такое чувство, что вы этого не сделали. - Я также просто отправляю файлы cookie один раз в методе 'header', который строит и отправляет HTTP-заголовок. Я также собираю их в списке перед отправкой, вот что делает «карта»; нет необходимости в именованном массиве. - Отредактировано, чтобы ответить, чтобы установить значения в пустую строку вместо истечения. – daxim

+0

Работает для меня тоже. Куки, не принадлежащие '% protected_names', имеют значение null. –

Смежные вопросы