我有会话验证脚本,使用以下正则表达式从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。有人面临类似的问题吗?如何解决这个问题?
答案 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
}