我对perl很新。我做了一个简单的登录脚本,应该在重定向到我的表单页面之前设置一个cookie。我已经尝试了所有我能想到的但是没有在Safari中设置cookie。几个帖子显示出轻微的变化,我已经尝试了所有这些。
我的代码:
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。 我不确定我在做什么。如果你有更好的建议, 那也很棒。
感谢您寻找
答案 0 :(得分:2)
状态301是永久重定向。您正在检查用户是否已登录,如果他们提供了正确的用户名/密码,则会给他们永久重定向?他们如何退出或以其他人身份登录?这是不可能的。
您需要清除Safari缓存并使用状态303,“请参阅其他”。
此外,您的代码容易受到SQL注入攻击。尝试:
my $userQuery = "SELECT user_name , password FROM egi_users WHERE user_name = ? AND password = ?";
my $result = $dbh->prepare($userQuery);
$result->execute($username, $cryptword)or die "MYSQL ERROR : $DBI::errstr\n";
此外,似乎有人可以通过制作带有用户名的cookie来登录您的应用。谁需要密码......