【问题标题】:Empty Session Creating on every Refresh每次刷新时创建空会话
【发布时间】:2014-09-02 19:59:13
【问题描述】:

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

索引.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";
}

【问题讨论】:

  • 检查加载是否失败$session = CGI::Session-&gt;load() or die CGI::Session-&gt;errstr();if ( $session-&gt;is_empty ) { $session= $session-&gt;new() or die $s-&gt;errstr; }

标签: perl session cgi


【解决方案1】:

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

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

否则,您每次只是创建一个不依赖于用户信息的匿名会话。

【讨论】:

  • 我照你说的做了,但它仍然像@miller 之前一样创建空会话
猜你喜欢
  • 2014-01-15
  • 2013-04-01
  • 2016-02-03
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2017-12-07
  • 2014-04-25
相关资源
最近更新 更多