2014-01-31 2 views
0

Я использую CGI.pm для выписки файлов cookie. Теперь во время использования пользователем моего сайта в файл cookie «test.com» добавляются другие файлы cookie (как показано в истории браузеров)Как я могу прочитать несколько файлов cookie с помощью CGI.pm от Perl?

Но теперь я хочу вывести пользователя из системы и «очистить» «ПК. Поскольку я не знаю, какие скрипты пользователь использовал, я не могу предвидеть, какие файлы cookie будут на ПК.

Вкратце, там есть способ прочитать все файлы cookie для «test.com» обратно в сценарий, чтобы затем я мог распечатать их снова с длительностью 1 с (фактически «удалив» их) ** Я знаю вы можете прочитать файл cookie с помощью $ xyz = cookie ('$ name') ... но как я могу создать массив, содержащий переменную $ name, чтобы я мог ее пропустить? Сценарий также будет запускаться на «test.com», поэтому политика межсетевого экрана не является проблемой.

+++++ brian d foy добавлен частичный ответ ниже. Так вот, как я предполагаю, код может быть натянут вместе.

use CGI::Cookie; 

%cookies = CGI::Cookie->fetch; 
for (keys %cookies) { 
$del_cookie.="cookie(-NAME=>'$cookies[$_]',-PATH=>'/',-EXPIRES=>'+1s');"; 
} 
print header(-cookie=>[$del_cookie]); 

Я задавался вопросом, как сценарий распознает домен. Появляется сценарий достаточно интеллектуальный, чтобы загружать только файлы cookie для домена, для которого выполняется сценарий. (Теперь мне только нужно выяснить, почему Firefox не удаляет истекшие куки-файлы !! Просто нашел некоторые из них, которые истекли с 29 по 31 января в моем тестовом домене, и сначала задавались вопросом, почему они не появились в моем списке файлов cookie!)

+2

http://search.cpan.org/~markstos/CGI.pm-3.64/lib/CGI/Cookie.pm#Recovering_Previous_Cookies –

ответ

0

Если вы пытаетесь сделать это из своего сценария CGI, у вас будет доступ к файлам cookie для этого домена. Вы можете получить этот список и сбросить их, дав им время в прошлом.

Похоже, вы не задаете вопрос о cookie вообще. Вы спрашиваете, как создать массив. CGI::Cookies (который поставляется с CGI.pm) есть пример, чтобы иметь дело со всем печеньем у вас есть доступ к под этим доменом:

%cookies = CGI::Cookie->fetch; 
for (keys %cookies) { 
    do_something($cookies{$_}); 
    } 
+0

Почему-то мой ответ не был опубликован (все еще изучается!). Я знал, что могу читать только один домен, как я процитировал в последнем предложении (но спасибо в любом случае). Это смешанный вопрос как с куки-файлами, так и с массивами, так как не знал, как читать первое в последнем. Я повторно отредактировал свой пост, используя ваш фрагмент, поэтому задайтесь вопросом, можете ли вы посоветовать это. – Cristofayre

0

Это то, что я закончил с:

use CGI::Cookies; 
%cookies = CGI::Cookie->fetch; 
@cookie = keys %cookies; 
for($x=0; $x<@cookie; $x++){ 
my $c = CGI::Cookie->new(-name => $cookie[$x],-value => '-',-expires => '+1s'); 
print "Set-Cookie: $c\n"; 
} 
print "content-type: text/html\n\n"; 

Firefox все еще оставляет cookie нетронутыми (видимо, это «проблема с дизайном», а не ошибка!), но они сбрасываются в значение void и истекают/теряются за 1 секунду. Плюс, почему оператор «print», отправляемый перед заголовком «content-type», не вызывает ошибку сервера, которую я не знаю. Хорошо, поэтому пуристы, вероятно, найдут более простую систему и используют «foreach», а не для следующего цикла ... но я понимаю, как работает последний!

+0

Некоторые браузеры не выполняют фактическую очистку до выхода. –

+0

Это поведение, которого я ожидал бы, но Firefox держится за них; У меня есть такая дата на сайтах, которые я посетил в ноябре! (Даты истекли, но физически там) Единственный способ избавиться - это ручное удаление. Даже если я настрою его использовать настраиваемые параметры в настройках, он вернется к опции «Запомнить историю»! Нет проблем. Просто суммируйте, что вы живете. Из того, что я прочитал, они говорят, что вы можете вернуться на вкладку, если браузер сработает – Cristofayre

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