每次刷新时都会创建空会话

时间:2014-07-12 06:58:19

标签: perl session cgi

每次刷新页面时都会创建一个空会话。

的index.cgi

    #!perl.exe
    use strict;
    use warnings;
    use DBI;
    use CGI;
    use database;
    use Digest::MD5 qw(md5 md5_hex md5_base64);
    use Data::Dumper;
    use CGI::Session;
    my $q = new CGI;
    my $session  = new CGI::Session();
    my $db=database->new();
    print $q->header;
    $session = CGI::Session->load();
    my $first_name  = $session->param("userid");
    my $login_fail=$q->param("attempt");
 <div class='login_form' style=''>
                        <form method='post' action='Session.cgi'>
                            <table>
END_HTML

                                if ($session->is_empty)
                                {
print <<END_HTML;

                                    <tr class='l_form_input'>
                                    <td><input type='text' name='userid' placeholder='Email or Phone'/></td>
                                    <td><input type='password' name='password' placeholder='Password'/></td>
                                    <td><input type='submit' name='submit' value='Log In'/></td>
                                    </tr>
                                    <tr>
                                    <td><span><a href='reg.cgi'>Not A Member Yet?</a></span></td>
                                    <td><span><a href='forgot.cgi'>Forget your password?</a></span></td>
                                    </tr>
END_HTML
                                    if (defined($login_fail)) {
                                        print "<tr><td colspan='2'>Incorrect Login<td></tr>";                               
                                    }

                                }else {
    print <<END_HTML;
                                    <tr class='l_form_input'>
                                    <td><span>Logged in as $first_name</span></td>
                                    <td><span><a href='logout.cgi'>logout<span></a></td>
                                    </tr>
END_HTML
                                }
print <<END_HTML;
                         </table>
                        </form>
                    </div>

Session.cgi

#!perl.exe
use strict;
use warnings;
use database;
use DBI;
use CGI;
use Digest::MD5 qw(md5 md5_hex md5_base64);

my $q = new CGI;
my $db=database->new();
#print $q->header;
my $email=$q->param("userid");
my $password=$q->param("password");
$password = md5_hex($password);
my $flag=$db->login_flag($email,$password);
if($flag == 1) {
    require CGI::Session;
    my $session = CGI::Session->new();
    print $session->header();
    $session->param("userid", $email);
    $session->flush();
    print "<META HTTP-EQUIV=refresh CONTENT=\"1;URL='http://localhost/website/index.cgi\">\n";
} else {
    print $q->header;
    print "<META HTTP-EQUIV=refresh CONTENT=\"1;URL='http://localhost/website/index.cgi?attempt=login_fail\">\n";
}

1 个答案:

答案 0 :(得分:0)

在创建新CGI时传递CGI::Session对象:

my $session = CGI::Session->new($q) or die CGI->Session->errstr;

否则,您每次创建匿名会话时都不依赖于用户的信息。