为什么我的SESSID_id(cookie)用空白名称克隆

时间:2012-07-30 01:10:56

标签: perl session cgi

我正在为一个简单的应用程序编写一个简单的auth方法

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两次 第二个有空白名称

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

我是perl的新手(几个小时),我需要一个简单的登录系统,但我发现(全部)的例子不完整或不准确

1 个答案:

答案 0 :(得分:1)

问题源于

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

第二次返回会话ID字符串,而不是第一次返回CGI::Cookie对象。


你的代码经历了荒谬的扭曲以获取cookie。让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';

请参阅header in CGI::Session