我有两个文件,一个是登录,我从中获取用户凭据,如果他使用CGI :: Sessions传递身份验证,我想将用户转发到另一个页面。问题是我在hello.pl文件中遗漏了一些东西。我在网上查找代码示例,但无法找到任何包含两个或更多文件的代码。我应该在hello.pl的代码中添加什么才能重定向使用会话,以便可以从hello.pl中提取变量用户名
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 my $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 }
hello.pl
#!/usr/bin/perl -wT
2 use strict;
3
4 use CGI::Session;
5 use CGI qw(:standard);
6
7 #my $cgi = CGI->new;
8 #my $usrname = $cgi->param("username");
9
10 my $username = $session->param("username");
11
12 print
13 header,
14 start_html (-BGCOLOR=>'green'),
15 "Hello, $usrname",p,
16 "The time now is: ",
17 scalar(localtime),
18 # h1({-style=>'Color: orange;'}, "$usrname you win \$1,000,000!");
19 end_html;
答案 0 :(得分:1)
我建议您查看以下问题,以获取有关使用CGI::Session
的其他示例:
但是,您可以清理两个脚本以将用户名从一个用户名转移到另一个脚本。
我建议最重要的是首先设置CGI
对象和CGI::Session
对象。对于您要创建的脚本和任何其他cgi样式脚本都是如此:
login.pl
use strict;
use warnings;
use CGI::Session;
use CGI qw(:standard);
my $open = "1234";
my $cgi = CGI->new;
my $session = CGI::Session->new( undef, $cgi, { Directory => '/tmp' } )
or die CGI::Session->errstr;
my $username = $cgi->param('username') // '';
my $password = $cgi->param('password') // '';
# Process Form
my @errors;
if ( $cgi->request_method eq 'POST' ) {
if ( !$username ) {
push @errors, "No username specified.";
}
if ( !$password ) {
push @errors, "No password specified.";
}
elsif ( $password ne $open ) {
push @errors, "Sorry, wrong password.";
}
if ( !@errors ) {
$session->param( username => $username );
print $cgi->redirect("hello.pl");
exit;
}
}
print $session->header(),
start_html("Input Form"),
start_form,
p(
"Please enter your username:",
textfield(
-name => 'username',
-maxlength => 20
)
),
p(
"Please enter your password:",
textfield(
-name => 'password',
-maxlength => 20
)
),
p(submit), hr,
end_form,
map( { p( { -style => 'Color: red;' }, $_ ) } @errors ),
end_html();
hello.pl
use strict;
use warnings;
use CGI::Session;
use CGI qw(:standard);
my $cgi = CGI->new;
my $session = CGI::Session->new( undef, $cgi, { Directory => '/tmp' } )
or die CGI::Session->errstr;
my $username = $session->param('username');
print header,
start_html( -BGCOLOR => 'green' ),
p("Hello, $username"), p( "The time now is: ", scalar(localtime) ),
end_html;