Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Safari中未设置Perl CGI::Cookie_Perl_Cookies_Cgi - Fatal编程技术网

Safari中未设置Perl CGI::Cookie

Safari中未设置Perl CGI::Cookie,perl,cookies,cgi,Perl,Cookies,Cgi,我对perl非常陌生。我制作了一个简单的登录脚本,应该在重定向到我的表单页面之前设置cookie。我已经尝试了我所能想到的一切,但是饼干在Safari中不起作用。有几篇文章显示了细微的变化,我都试过了 我的代码: my $userQuery = "SELECT user_name , password FROM egi_users WHERE user_name = '$username' AND password = '$cryptword'"; my $result = $dbh->p

我对perl非常陌生。我制作了一个简单的登录脚本,应该在重定向到我的表单页面之前设置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::会话; 使用CGI::Cookie

脚本正确地验证和重定向,但从未设置cookie。 我不知道我在做什么。如果你在方法上有更好的建议, 那也太好了


感谢您查看

状态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就可以登录到你的应用程序。谁需要密码…

为什么要打印自己的标题而不是使用CGI模块?为什么使用JavaScript重定向而不是HTTP重定向?我尝试过使用HTTP重定向,它们在打印头后似乎不起作用,所以如果在页面中间需要重定向,我发现JS方法是唯一的选择。至于用CGI打印报头,我昨天才第一次看到。HTTP重定向就是报头。好吧,这很酷。我创建了一个重定向头并将cookie和所有内容放在其中。它仍然没有设置,但它清理了我的代码。谢谢