使用CGI :: Session时出现Cookie错误

时间:2014-08-19 05:07:28

标签: perl cgi session-cookies

这是我第一次使用CGI :: Sessions进行实验,我在日志中收到一条错误消息,我不知道如何修复。看起来问题出在我的代码的第28行,$ cookie变量未导入:

  

[2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]变量“$ cookie”未导入/usr/lib/cgi-bin/login.pl第28行。   5028 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1] \ t(您的意思是& cookie而不是?)   5029 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]变量“$ cookie”未导入/usr/lib/cgi-bin/login.pl第29行。   5030 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1] \ t(您的意思是& cookie而不是?)   5031 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]全局符号“$ cookie”需要在/usr/lib/cgi-bin/login.pl第28行显式包名。   5032 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]全局符号“$ cookie”需要在/usr/lib/cgi-bin/login.pl第29行显式包名。   5033 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]在/usr/lib/cgi-bin/login.pl第34行使用“strict subs”时,不允许使用Bareword“username”。   5034 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1]在/usr/lib/cgi-bin/login.pl第35行使用“strict subs”时,不允许使用Bareword“password”。   5035 [2014年8月18日星期一21:42:32] [错误] [客户端127.0.0.1] /usr/lib/cgi-bin/login.pl的执行因编译错误而中止。   5036 [Mon Aug 18 21:42:32 2014] [error] [client 127.0.0.1]脚本标题的提前结束:login.pl

这是我的代码:

1 #!/usr/bin/perl -wT
  2 use strict;
  3 
  4 use CGI::Session;
  5 use CGI qw(:standard);
  6 
  7 my %names = map { $_ => 1 } param;
  8 my $open = "1234";
  9 
 10 sub windowLayout() {
 11           header,
 12           start_html("Input Form"),
 13           start_form,
 14           "Please enter your username:",
 15           textfield(-name=>'username',
 16                           -maxlength=>20),p,
 17           "Please enter your password:",
 18           password_field(-name=>'password',
 19                           -maxlength=>20),p,
 20           submit,hr
 21 }
 22 
 23 if ($names{username} and $names{password}) {
 24 
 25 my $cgi = new CGI;
 26 my $session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});
 27 
 28 $cookie = $cgi->cookie(CGISESSID => $session->id);
 29 print $cgi->header(-cookie=>$cookie);
 30 
 31 my $username  = param("username");
 32 my $password  = param("password");
 33 
 34 $session->param(username, $username);
 35 $session->param(password, $password);
 36 
 37  if ($password ne $open) {
 38        print
 39         windowLayout(),
 40         end_form,
 41           p({-style=>'Color: red;'},
 42                  "Sorry wrong password!");
 43        print end_html;
 44   } else {
 45        print
 46           redirect("hello.pl");
 47   }
 48  }else {
 49     print
 50          windowLayout(),
 51          end_html;
 52  }   

1 个答案:

答案 0 :(得分:1)

当您在代码中使用strict时(当然,这是一个很好的习惯),您需要使用{{1来声明所有变量(或类似的东西)。你不能为my做到这一点。

所以改变:

$cookie

要:

$cookie = $cgi->cookie(CGISESSID => $session->id);

为了将来参考,如果您收到一条您不了解的Perl错误消息,可以通过向代码中添加my $cookie = $cgi->cookie(CGISESSID => $session->id); 来获取有关该问题的更多详细信息(但请记住,问题是固定的。)

您还有其他一些错误。字符串'用户名'和密码'需要在第34和35行引用字符串。