Perl,CGI :: Session无法正常工作

wak*_*dan 1 perl cgi

我正在编写一个需要使用模块CGI :: Session ver 4.35 的Web应用程序.从客户端收到带有SESSIONID字符串的请求

$sid = $cgi->cookie("CGISESSID") || $cgi->param("CGISESSID") || undef;
Run Code Online (Sandbox Code Playgroud)

它尝试通过传递$ sid作为参数来重新创建会话

$session = new CGI::Session($sid) or ($logger->error(CGI::Session->errstr) and die);
Run Code Online (Sandbox Code Playgroud)

如果有与SID创建一个会话,$session->id并且$sid假定是相同的,但事实是这是不是.

这是我创建一个全新会话的语句

$session = new CGI::Session("id:md5", undef, {Directory=>$SESSION_DIR}) 
    or ($logger->error(CGI::Session->errstr) and die);
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?我该如何正确使用模块CGI :: Session?

Mar*_*erg 5

我是CGI :: Session的维护者.我建议在所有情况下以相同的方式创建会话,如下所示:

$session = CGI::Session->new("id:md5", $cgi, {Directory=>$SESSION_DIR});
Run Code Online (Sandbox Code Playgroud)

这遵循new()文档中的推荐语法.我还建议您确保在脚本末尾附近显式调用flush().其原因在此解释得更多:

http://metacpan.org/pod/CGI::Session#A-Warning-about-Auto-flushing