perl正则表达式工作不稳定

时间:2014-01-18 13:57:47

标签: regex perl cookies

我有会话验证脚本,使用以下正则表达式从cookie中提取会话ID:

my $req = Apache2::Request->new(my $r);
my $cookie = $req->headers_in->{Cookie} || undef;
if ($cookie) {
    $cookie =~ s/SESSION_ID=(\w+)/$1/;
    ...
}

Cookie的格式如下:SESSION_ID = eac9a769e76a26a619c176b18b5b3db0

但是我不时会在apache错误日志中遇到以下错误:

[Sat Jan 18 20:32:51 2014] [error] Invalid session ID: SESSION_ID=eac9a769e76a26a619c176b18b5b3db0 at /usr/share/perl5/Apache/Session/Generate/MD5.pm line 42.\n

这显然意味着这个正则表达式有时不起作用:

$cookie =~ s/SESSION_ID=(\w+)/$1/;

与其他一些正则表达式相同的问题,我正在使用perl 5.10运行mod_perl2。有人面临类似的问题吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

{Cookie}中的任何内容都应该与正则表达式无关,除非它的undef。

 my $req = Apache2::Request->new(my $r);
 my $cookie_old = "";
 my $cookie = "";
 if ( exists $req->headers_in->{Cookie} )
 {
      $cookie = $req->headers_in->{Cookie};
      if ( defined $cookie )
      {
         $cookie_old = $cookie;
         $cookie =~ s/SESSION_ID=(\w+)/$1/;
         #   ...
      }
 }
 if ( $cookie ne $cookie_old )
 {      
    # do something with cookie if changed
 }