【发布时间】:2011-11-23 18:48:12
【问题描述】:
这是一个奇怪的问题。 :)
我有一个在 Apache 1.3 下运行的脚本,带有 mod_perl 的 Apache::PerlRun 选项。它使用标准的 CGI.pm 模块。它是在繁忙的服务器上定期访问的脚本,通过 https 访问。
URL 通常类似于...
/script.pl?action=edit&id=47049
然后以通常的方式将其带入 Perl...
my $action = $cgi->param("action");
my $id = $cgi->param("id");
这已经成功运行了几年。然而,我们本周开始收到来自访问此脚本并获得空白页面的客户的支持请求。我们已经有如下一行,将当前 URL 放入我们用于客户报告页面问题的表单中......
$cgi->url(-query => 1);
当我们查看页面源代码时,该命令的结果是相同的 URL,但查询字符串完全不同。
/script.pl?action=login&user=foo&password=bar
我们识别为来自系统其他地方完全不同的脚本的查询字符串。
无论这听起来多么疯狂,似乎当用户使用查询字符串访问 URL 时,脚本看到的查询字符串来自另一个脚本的先前请求。当然脚本不能处理那个动作并且什么也不输出。
我们运行了一些自动化测试脚本来查看这种情况发生的频率,但并非每次都如此。为了给混合带来一些额外的混乱,在 Apache 重新启动后,问题似乎最初完全消失,只是稍后再出现。所以不管是什么原因,重启都会以某种方式缓解,但我们看不到 Apache 怎么可能接受一个用户的请求并将其与另一个用户混合。
【问题讨论】: