【问题标题】:How can I read multiple cookies with Perl's CGI.pm?如何使用 Perl 的 CGI.pm 读取多个 cookie?
【发布时间】:2014-01-31 18:43:46
【问题描述】:

我正在使用 CGI.pm 来写出 cookie。现在,在用户使用我的网站的过程中,其他 cookie 被添加到“test.com”cookie 集中,(如浏览器历史记录所示)

但现在我想注销用户并“清理”PC。由于我不知道用户使用了哪些脚本,所以我无法预见 PC 上的 cookie 会是什么。

简而言之,它有一种方法可以将“test.com”的所有 cookie 读回脚本中,这样我就可以在 1 秒内再次打印出来(有效地“删除”它们)** 我知道你可以使用 $xyz=cookie('$name') 重新读取 cookie ...但是如何创建包含 $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 不删除过期的 cookie!刚刚在我的测试域中发现了一些在 1 月 29 日至 31 日过期的列表,起初我想知道为什么它们没有出现在我的 cookie 列表中! )

【问题讨论】:

标签: perl cookies cgi.pm


【解决方案1】:

如果您尝试从您的 CGI 脚本执行此操作,您将只能访问该域的 cookie。您可以获取该列表并通过给他们一个过去的时间来重置它们。

听起来您根本没有问 cookie 问题。你在问如何制作一个数组。 CGI::Cookies(与 CGI.pm 一起提供)有一个示例来处理您在该域下可以访问的所有 cookie:

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

【讨论】:

  • 不知何故,我的回复没有发布(仍在学习中!)。我确实知道我只能读取我在最后一句中引用的一个域,(但无论如何谢谢)这是一个 cookie 和数组的混合问题,因为不知道如何将前者读入后者。我已经用你的 sn-p 重新编辑了我的帖子,所以想知道你是否可以就此提出建议
【解决方案2】:

这就是我最终的结果:

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 秒内过期/变为冗余。另外,我不知道为什么在“content-type”标头之前发送的“print”语句不会导致服务器错误。好的,所以纯粹主义者可能会找到一个更简单的系统,并使用“foreach”而不是 for/next 循环......但我理解后者是如何工作的!

【讨论】:

  • 一些浏览器在退出之前不会进行实际的清理。
  • 这是我所期望的行为,但 Firefox 坚持下去;我有一些可以追溯到我在 11 月访问过的网站!! (日期已过期,但仍然存在)唯一摆脱的方法是手动删除。即使我将其设置为使用选项中的自定义设置,它也会跳回“记住历史”选项!没有问题。只是总结你的生活。从我读到的,他们说如果浏览器崩溃,你可以跳回一个标签
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多