2013-04-18 4 views
1

나는 perl을 매우 신형입니다. 내 양식 페이지로 리디렉션하기 전에 쿠키를 설정해야하는 간단한 로그인 스크립트를 만들었습니다. 내가 생각할 수있는 모든 것을 시도했지만 Safari에서는 쿠키가 설정되지 않습니다. 몇몇 게시물은 약간의 유사점을 보여 주며 모두 시도했습니다.Perl CGI :: Safari에서 쿠키가 설정되어 있지 않습니다.

내 코드 : 내가 필요한 모든 이리저리 CGI 보이는의 구현했습니다

my $userQuery = "SELECT user_name , password FROM egi_users WHERE user_name = '$username' AND password = '$cryptword'"; 
my $result = $dbh->prepare($userQuery); 
$result->execute()or die "MYSQL ERROR : $DBI::errstr\n"; 

my $rows = $result->rows; 

if($rows == 1){ 

    #login is valid. Create cookie and send to patient_data page.                       
    #print("success\n");                                 

    my $c = CGI::Cookie->new(-name=>'login_access', 
          -value=>$username, 
          -expires=>'+1h'); 

    print $q->redirect(-uri=>'http://mytestserver.com/cgi/patient_data.pl' , -status => '301' , -cookie => $c); 


}else{ 

    print $q->redirect(-uri=>'http://mytestserver.com/); 
} 

;

CGI; CGI :: Carp ... CG :: Session을 사용하십시오. CGI :: Cookie를 사용하십시오.

스크립트의 유효성을 올바르게 검사하고 리디렉션되지만 쿠키가 설정되지 않습니다. 내가하는 일을 잘 모르겠습니다. 당신이 접근법에 더 좋은 제안을한다면, 도 좋을 것입니다.

+0

왜 CGI 모듈을 사용하는 대신 자신의 헤더를 인쇄하고 있습니까? 왜 HTTP 리디렉션 대신 JavaScript 리디렉션을 사용합니까? – friedo

+0

http 리디렉션을 사용해 보았는데 헤더가 인쇄 된 후 작동하지 않는 것 같습니다. 따라서 페이지 중간에서 리디렉션이 필요한 경우 JS 메서드 만 사용할 수 있습니다. CGI로 헤더를 인쇄하는 것까지, 나는 어제 그것을 처음으로 보았습니다. – Miek

+0

HTTP 리디렉션 *은 * 헤더입니다. – friedo

답변

2

상태 (301)을 찾고에 대한

덕분에 영구 리디렉션입니다. 사용자가 로그인했는지 여부를 확인한 다음 올바른 사용자 이름/비밀번호를 제공하면 영구 리디렉션을 제공합니까? 로그 아웃하거나 다른 사람으로 로그인하는 방법은 무엇입니까? 그것은 불가능합니다.

Safari 캐시를 비우고 상태 303, '기타보기'를 사용해야합니다.

또한 코드는 SQL 주입 공격에 취약합니다. 시도해보십시오.

또한 누군가 사용자 이름으로 쿠키를 만들어 앱에 로그인 할 수도 있습니다. 암호가 필요한 사용자 ...

+0

팁 주셔서 감사합니다 – Miek

관련 문제