2014-01-18 6 views
-1

나는 다음과 같은 정규식을 사용하여 쿠키에서 세션 ID를 추출 세션 검증 스크립트가 불안정한 작동합니다 SESSION_ID = eac9a769e76a26a619c176b18b5b3db0 수시로 나가 수에서 그러나펄 정규식

:

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

쿠키 같은 형식을가집니다 아파치 오류 로그에 다음과 같은 오류 :

[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/; 

일부 다른 정규식에서 동일한 문제가 발생하며 mod_perl2를 perl 5.10과 함께 실행하고 있습니다. 비슷한 문제가있는 사람이 있습니까? 이 문제를 해결하는 방법?

+1

아파치 오류가 perl 정규식 코드와 어떤 관련이 있습니까? 정규 표현식이 작동하지 않는다는 것이 명백한 이유는 무엇입니까? – Barmar

+0

사이드 노트; '$ cookie = ~ s/SESSION_ID = //;' –

+0

@Barmar, "SESSION_ID = eac9a769e76a26a619c176b18b5b3db0"이 Apache :: Session :: File에 전달되어 "eac9a769e76a26a619c176b18b5b3db0"대신 세션 유효성을 검사 함을 알립니다. – swserg

답변

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 
} 
+0

지금까지 감사드립니다. undef;'$ 쿠키 검사 줄에서 = 문제가 해결되었습니다 : 나는'undef'와 조심해야만합니다. – swserg