2013-09-25 6 views
3

브라우저를 닫더라도 로그인 할 필요가 없도록하고 싶습니다. 내 쿠키는 한 달 후에 만료됩니다. 성공적으로Perl CGI 영구 쿠키

$session = CGI::Session->new (undef, undef, {Directory=>'tmp/'}) 
             or die CGI::Session->errstr; 
       $session->param('username', $username); 
       $session->expire('+1M');     
       $cookie = $cgi->cookie(-name=>$session->name, -value=>$session->id); 
       print $cgi->header(-cookie=>$cookie); 

사용자가 로그인 그들은 그 때만큼 그들은 브라우저를 종료하지 않는 한 액세스 할 수있는 다른 페이지로 리디렉션됩니다

.

my $cookie = $cgi->cookie('CGISESSID'); 
if ($cookie){ 
     print $cgi->header(-cookie => $cookie); 
else{ 
     //ask them to relog in 
} 

내가 TMP /에 생성 된 세션을 볼 수 있습니다이 두 번째 페이지에있는 코드입니다. 브라우저를 닫은 후에 기존 쿠키를로드하려면 어떻게해야합니까? 사용자/브라우저에 따라로드 할 세션을 어떻게 알 수 있습니까?

답변

3

쿠키에 향후 만료일을 설정하는 경우 사용자가 브라우저를 다시 시작한 후에도 계속 유효 기간이 유지되어야합니다 (당일 이전에 다시 시작하는 경우). 쿠키를로드하려면, 당신은 일을하는지 정확히 수행

:

my $cookie = $cgi->cookie('CGISESSID'); 

는 단순히 CGI :: 세션의 new 방법에 CGI 개체를 전달할 수 있습니다 쿠키를 사용하여 기존 세션을로드하려고하기

my $session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"}); 

이렇게하면 CGI 요청과 함께 전달 된 쿠키를 사용하여 기존 세션을 초기화하려고 시도합니다. 하나도 존재하지 않으면 새로운 세션이 만들어집니다. 쿠키 이름이 CGISESSID이라고 가정합니다. 다른 이름을 사용하려면 실행 : 당신이 이미하지 않은 경우

CGI::Session->name("MY_SID"); 
# or 
$session->name("MY_SID"); 

$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'}); 

, 나는 CGI::Session tutorial을 통해 읽는 추천 할 것입니다.


편집 :이 세션은 일개월

$session->expire('+1M'); 

에 만료되도록 설정하지만, 쿠키가 아니었다. 쿠키에 만료를 설정하지 않으면 브라우저는 메모리에 저장하지만 디스크에는 저장하지 않습니다. 브라우저를 닫으면 쿠키가 사라집니다. 쿠키 만료일을 설정하려면 다음과 같이하십시오.

+0

감사합니다. 내가 왜 내 $ cookie = $ cgi-> cookie ('CGISESSID')인지 확실하지 않은 문서를 읽었습니다. 아무것도 돌려주지 않을거야? 두 번째 파일에 새 cgi 객체를 만드는 중입니다. 아마도 그 이유는 무엇일까요? – Jabda

+1

@Jabda 귀하의 브라우저가 쿠키를 실제로 받았는지, 올바른 세션 ID를 가지고 있는지 확인 했습니까? Firefox에서는 '편집 -> 환경 설정 -> 개인 정보 -> 개별 쿠키 제거'로 이동하여이 작업을 수행 할 수 있습니다. 사이트별로 구성된 모든 저장된 쿠키 목록이 제공됩니다. 또한 검색 기능이 있습니다. – ThisSuitIsBlackNot

+0

예 브라우저를 닫기 전에 쿠키가 표시됩니다. 브라우저를 다시 열고 페이지로 다시 이동하면 브라우저에 쿠키가 없습니다 (쿠키가/tmp에 있음) – Jabda