0

単純なアプリケーション用の単純な認証メソッドを書いています

sub Kernel::get_cookie
{
    my ($q, %vars) = @_;

    # Crea la sesion
    my $sid = $q->cookie($vars{'COOKIE_NAME'}) || undef;
    my $session = undef;

    if(!$sid) {
        $session = CGI::Session->new('id:md5', $q, {Directory=>$vars{'SESSION_DIR'}});
    } else {
        $session = CGI::Session->load($q);
    }

    # Genera la cookie
    my $cookie = $q->cookie(
        -name => $vars{'COOKIE_NAME'},
        -value => $session->id
    );

    # regresa la cookie
    return $cookie;
}

# ... in main code
print $q->header(-cookie=>$cookie);

最初はCookieを正常に取得しましたが、ページを更新すると、Cookieを2回取得し、2回目は空白の名前になります

'CGICOOKIE': '1a2c3s4d5d6...'
        '' : '1a2c3s4d5d6...'

私はPerlの初心者で(数時間)、簡単なログインシステムが必要ですが、私が見つけた例(すべて)は不完全または不正確です

4

1 に答える 1

1

問題は

$q->cookie(
    -name => $vars{'COOKIE_NAME'},
    -value => $session->id
);

CGI::Cookie1回目のようなオブジェクトではなく、2回目にセッションID文字列を返します。


あなたのコードは、クッキーを取得するためにばかげたゆがみを通過します。CGI :: Sessionにすべてを処理させてください!コード全体を次のように置き換えることができます。

use CGI qw();
use CGI::Session qw();

my %vars = (
    COOKIE_NAME => 'CGICOOKIE',
    SESSION_DIR => '/tmp',
);
my $q = CGI->new;
CGI::Session->name($vars{COOKIE_NAME});
my $session = CGI::Session->new('id:md5', $q, {Directory=>$vars{'SESSION_DIR'}});

print $session->header(-type => 'text/plain');
# prints cookie header, too
print 'hi';

headerCGI::Sessionを参照してください。

于 2012-07-30T07:41:09.140 に答える