Я очень новичок в Perl. Я сделал простой сценарий входа, который должен установить cookie перед перенаправлением на мою страницу формы. Я пробовал все, что мог, но cookie не установлен в Safari. Несколько сообщений показывают небольшие вариации, и я пробовал их все.Perl CGI :: Cookie не установлен в Safari
мой код:
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; использование CGI :: Carp ... использование CG :: Session; использование CGI :: Cookie;
Сценарий правильно проверяет и перенаправляет, но cookie никогда не устанавливается. Я не уверен, что делаю. Если у вас есть лучшее предложение в подходе, , это тоже здорово.
Спасибо за внимание
Почему вы печатаете свои собственные заголовки вместо использования модуля CGI? И зачем использовать перенаправление JavaScript вместо перенаправления HTTP? – friedo
Я пробовал использовать перенаправления http, и они, похоже, не работают после того, как заголовок был напечатан, поэтому, если перенаправление необходимо в середине страницы, я считаю, что метод JS является единственным вариантом. Что касается печати заголовка с CGI, я только что увидел это вчера в первый раз. – Miek
HTTP-перенаправление * - это заголовок. – friedo