2014-07-09 5 views
0

두 개의 CGI 스크립트가 있습니다. Login.cgi 및 welcome.cgi 나는cgi/perl에서 리디렉션을 통한 변수 전달

#!C:/Perl/bin/perl.exe -w 
#welcome.cgi 
use warnings; 
use CGI::Pretty qw(:all); 
use strict; 
my $cgi=new CGI; 
my $username; 
print header(); 
print start_html("Welcome"),h1("Hello, $username"); 
print end_html(); 

가 어떻게 사용자 이름을받을 수 있나요 welcome.cgi 내가

#!C:/Perl/bin/perl.exe -w 
#login.cgi 
use strict; 
use warnings; 

use CGI::Pretty qw(:all); 

my $cgi  = new CGI; 
my $username = $cgi->param('username'); 
my $password = $cgi->param('password'); 

if (($cgi->param('username') eq 'demo') && ($cgi->param('password') eq 'demo')) { 
    print $cgi->redirect("welcome.cgi"); 
} 
else { 
    print header(); 
    print start_html(-title => "Login"); 
    if ($cgi->param('username') or $cgi->param('password')) { 
     print center(font({ -color => 'red' }, "Invalid input")); 
    } 
    print generate_form(); 
    print end_html(); 
} 

sub generate_form { 
    return start_form, 
     h1("Please Login"), 
     p("username", textfield('username')), 
     p("password", textfield('password')), p(submit), 
     end_form; 
} 

또 다른 페이지를 두 페이지입니다 여기에이 두 페이지 사이에 변수를 전달하려면 변수가 welcome.cgi로 전달 되었습니까?

+0

볼 수 있습니다. 차이점은 미묘하지만,'new '를 항상 그렇게 부르는 습관에 빠지면 미래의 어느 시점에서 디버깅 시간을 많이 절약 할 수 있습니다. –

답변

1

CGI::Session을 사용하십시오.

#login.cgi 
use strict; 
use warnings; 

use CGI::Pretty qw(:all); 
use CGI::Session; 

my $cgi  = new CGI; 
my $session = CGI::Session->new($cgi) or die CGI->Session->errstr; 
my $username = $cgi->param('username') // ''; 
my $password = $cgi->param('password') // ''; 

if ($username eq 'demo' && $password eq 'demo') { 
    $session->param(username => $username); 
    print $cgi->redirect("welcome.cgi"); 
    exit; 
} 

print $session->header(); 
print start_html(-title => "Login"); 
if ($username or $cgi->param('password')) { 
    print center(font({ -color => 'red' }, "Invalid input")); 
} 
print start_form, 
    h1("Please Login"), 
    p("username", textfield('username')), 
    p("password", textfield('password')), p(submit), 
    end_form, 
    end_html(); 

그리고 환영 스크립트 : 스크립트 왜이 구현은 좋은 선택 사이에서 정보를 전달하는 모든 다른 방법에 대한 자습서를 들어

CGI::Session::Tutorial은 로그인 스크립트로 구현 읽기 :

#welcome.cgi 
use strict; 
use warnings; 

use CGI::Pretty qw(:all); 
use CGI::Session; 

my $cgi  = new CGI; 
my $session = CGI::Session->new($cgi) or die CGI->Session->errstr; 

my $username = $session->param('username'); 

print header(); 
print start_html("Welcome"),h1("Hello, $username"); 
print end_html(); 
1

당신 또는 당신이 cookie 또는 session에 저장 한 후 다른 스크립트에서 검색 할 수 있습니다 (A query string에를 인코딩하고 URL에 당신이 리디렉션되는 것을 추가하여) 직접 전달할 수 있습니다.

0

나는 Mr.Miller와 약간 일치하지 않을 것이다. CGI :: 세션은 특히 인해 현재 많은 안부 오래된 :

  1. 오래된 쿠키를 설정하는 방법과 쿠키 ID 알고리즘이 충분히 확보되지 않는 RFC6265
  2. 을 준수하지 않는, 저자 다른 프로젝트로 옮겼습니다.

따라서 교육적 목적으로 사용하지 않는 것이 좋습니다. 원래의 질문에 관해서

, 당신은`내 $의 CGI = CGI-> new`와`내 $의 CGI = 새로운 CGI`를 교체하십시오이 간단한 튜토리얼 http://practicalperl5.blogspot.in/2014/07/perl-login-script.html

+0

인사말 메이트. 이 생각에 대해 내 게시물에 코멘트를 추가하는 것이 도움이되었지만 다행스럽게도 나는 스윙을했습니다. 어쨌든, 나는 당신의 생각에 다소 동의한다고 확신합니다 (더 읽어야 할 것입니다). 그러나 더 큰 생각은'CGI' 자체가 대부분 시대에 뒤쳐져서 왜 곧 펄 코어에서 제거 될지에 대한 고려라고 생각합니다. 'CGI :: Session'은 아마도'CGI'를 사용하여 세션을 추적하기위한 최선의 선택 일 것입니다.하지만 더 나은 옵션을 알고 있다면 나는 관심을 가질 것입니다. – Miller

+0

쿠키가 실제로 어떻게 작동하는지 이해하려면 RFC6265를 살펴 보는 것이 가장 좋을 것이라고 생각합니다. 나는 "정말로"를 의미한다. 로그인하는 동안 쿠키가 설정되고 (성공하는 경우) 회원 페이지에서 읽습니다. 그렇지 않은 경우 사용자가 첫 페이지로 리디렉션됩니다. 내가 도움을주기 위해 작성한 자습서가 있습니다. 잠시 뒤로 : http://rikacomet.blogspot.in/2014/01/setting-cookies-in-perl-rfc-6265.html 추신 : 내 담당자가 50 세 미만이므로 이 사이트 메커니즘에 따라 먼저 댓글을 달아주세요. 대답 할 수 밖에 없었습니다. –

관련 문제