0

私はApache2::Cookie (つまり、mod_perl を使用した Apache2)を使用して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てこれを吐かないようにするか (私が見つけることができるものはありません)、または私が見逃している他の明るいアイデアを見つけます。

4

2 に答える 2

0

(はい、それは除外された可能性がありますが、率直に言って、コードは非常に単純であり、必要はありませんでした)。

私はこの機会を利用して、別の見落としをするのではなく、この見落としを修正します

あなたが主張するなら、あなたは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};
 }
于 2011-11-15T11:01:28.797 に答える
0

私は同じ問題に直面しました、そしてあなたはここで解決策を見つけることができます:

Apacheログに「予期されたトークンがありません」というエラーが表示されます

于 2012-05-31T04:21:39.520 に答える