我正在为一个简单的应用程序编写一个简单的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的新手(几个小时),我需要一个简单的登录系统,但我发现(全部)的例子不完整或不准确
答案 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';