2009-10-31 9 views
2

저는 CGI.pm 모듈을 사용하여 Perl CGI에서 숙제를하고 있습니다. 내 코드에서는 쿠키를 확인하고 있습니다. 쿠키가 있으면 다른 CGI 스크립트를 시작하고 싶습니다. 다른 상황에서는 유사한 코드를 사용할 수 있었지만이 경우 단순히 찾고있는 리디렉션이 아닌 다음 브라우저 출력 만 얻습니다. 나는 여기를왜 내 새로 고침 헤더가 작동하지 않습니까?

#get the cookie 
my %SIDhash = cookie('SIDhash'); 

if (exists $SIDhash{"SID"}) { 
    print header(-refresh=>'0; homepage.pl.cgi'); 
} 

을 이해하고 있지 않다 무엇 기초 :

Refresh: 1; URL=homepage.pl.cgi 
Content-Type: text/html; charset=ISO-8859-1 

여기 내 코드입니까?

+0

제가하고있는 것보다 homepage.pl.cgi을 시작/전환하는 더 좋은 방법이 있습니까? 나는 단지 perl cgi를 배우면서 제안에 매우 개방적이다. –

+0

나머지 코드는 어디에 있습니까? 스크립트가 출력하는 전체 헤더입니까? 모든 것을 문제를 해결하는 가장 작은 예제로 줄이십시오. –

답변

1

이 트릭을 수행해야합니다

당신이 첫번째 변수에 헤더 구성 요소를 저장, 코드의 다양한 장소에서 조각의 헤더를 조립하는 경우
print header(
    -refresh => '0; url=homepage.pl.cgi', 
    -cookie => $cookie, 
); 

예 :

my %headers; 

# later... 
$headers{-cookie} = $cookie; 

# later still: 
if (exists $SIDhash{SID}) 
{ 
    # we want to redirect, so print all headers and we're done. 
    print header(%headers, -refresh => '0; url=homepage.pl.cgi'); 
    exit; 
} 

# if we're still here, nothing is printed yet.. continue preparing data and print when ready. 
# ... 
+1

고마워, 내가 할 수있는 한 그 속임수를했고 나는 귀중한 교훈을 배웠다 : 한 페이지 당 단 하나의 헤더! 내 문제에 대한 모든 사람들의 사려 깊은 답변에 감사드립니다. 이 프로젝트는 아직 완전하지 않으므로 CGI 전문가가 더 많은 것을 준비하십시오! -cb –

-1

내가 무엇을 말할 수에서

print header(-refresh=>'0; url=homepage.pl.cgi'); 

에 라인을 변경해보십시오

감사합니다, CB이 지금은 정확해야한다.

This page on Wikipedia은 새로 고침 및 기타 리디렉션 방법에 대한 정보를 제공합니다.

+0

아니요, 대문자 사용을 수정해도 영향을 미치지 않습니다. –

+0

그럴 수도 있습니다. 새로 고침을 수동으로 작성한 이후로 오랜 시간이 걸렸으므로 구문이 올바른지 확인했습니다. – Jason

+0

해당 변경 사항이 적용되지 않습니다. 앞의 코드 블록에서 최근에 헤더 (-cookie => $ cookie)를 인쇄했는지가 중요합니까? –

-1

나는 당신의 새로 고침이 작동하지 않는 이유를 잘 모르겠지만, 그것을 사용하는 것이 더 적절할 것 같은데 :

HTTP/1.1 302 Found 
Location: http://www.example.org/ 

그냥 생각.

+0

좋아, 문제가되는 행을 으로 바꾸려고했습니다. print redirect ('homepage.pl.cgi'); 행운은 없습니다. 이제 막 알았습니다 : Status : 302 Moved Location : homepage.pl.cgi –

+1

임시 리디렉션이 더 적절할 수 있지만 여전히 중복 헤더 문제를 해결해야합니다. – Jason

+0

나는 일시적인 것으로 보이지는 않지만 실제로는 예상되는 리디렉션이라는 이유로 307에 동의하지 않습니다. – Myles

-1

그 후에 종료 하시겠습니까?

원본 스크립트를 새로 고치는 경우 더 이상 출력이 발생하지 않습니다. 이 경우 문제를 설명 할 수 있습니다.

관련 문제