解析Apache2中未引用的cookie的异常



我使用Apache2::Cookie(即Apache2与mod_perl)来解析Cookie。

my %cookies = Apache2::Cookie->fetch;
do_something($cookies{"cookie1"});

此代码已在生产环境中运行多年,没有任何问题。我刚刚了解到,具有特定格式的cookie会导致抛出异常Expected token not present。这个cookie是由客户端JavaScript生成的:

document.cookie = "val=a,b"

Apache2::Cookie似乎不喜欢逗号。

我可以用eval捕获这个错误,但是cookie检索是在代码中的许多地方完成的(是的,它可以被分解出来,但坦率地说,代码非常简单,没有必要)。在任何情况下,它现在在那里,我必须跟踪并捕获这个cookie的异常,我没有设置,我不需要

是否有一种更简单的方法来摆脱这种异常,而不是重构几十个对Apache2::Cookie->fetch的调用?通过重新定义Apache2::Cookie::fetch,或者通过为libapreq设置一个全局标志而不是在此呕吐(没有任何我可以找到),或者我错过的其他一些聪明的想法。

(是的,它可以被分解,但坦率地说,代码太简单了,没有必要)。

我会抓住这个机会改正这个疏忽,而不是制造另一个

如果你坚持的话,你可以从CGI::Cookie中学习一些东西

 sub fetch {
     my $class = shift;
     my $raw_cookie = get_raw_cookie(@_) or return;
     return $class->parse($raw_cookie);
 }
 sub get_raw_cookie {
   my $r = shift;
   $r ||= eval { $MOD_PERL == 2                    ? 
                   Apache2::RequestUtil->request() :
                   Apache->request } if $MOD_PERL;
   return $r->headers_in->{'Cookie'} if $r;
   die "Run $r->subprocess_env; before calling fetch()" 
     if $MOD_PERL and !exists $ENV{REQUEST_METHOD};
   return $ENV{HTTP_COOKIE} || $ENV{COOKIE};
 }

我也遇到过同样的问题,你可以在这里找到解决方案:

Apache日志中出现" Expected token not present "错误

相关内容

  • 没有找到相关文章

最新更新