Perl 如何使用CGI::session更改会话id?

Perl 如何使用CGI::session更改会话id?,perl,session,session-cookies,sessionid,Perl,Session,Session Cookies,Sessionid,我有一个应用程序,您可以在其中创建会话cookie,如下所示: $session = CGI::Session->new() or die CGI::Session->errstr; $cookie = CGI::Cookie->new(-name=>$session->name, -value=>$session->id,-expires=>'+2h', -secure => 1 ); 然后按如下方式设置标题: print $q->

我有一个应用程序,您可以在其中创建会话cookie,如下所示:

$session = CGI::Session->new() or die CGI::Session->errstr;
$cookie = CGI::Cookie->new(-name=>$session->name, -value=>$session->id,-expires=>'+2h', -secure => 1 );
然后按如下方式设置标题:

print $q->header(-cookie=>$cookie);

我需要在登录到应用程序时更改此cookie的会话ID(以类似于php的
会话\u重新生成\u ID
)。在Perl中有这样做的方法吗?我一直在查阅文档,但我找不到任何方法来真正做到这一点。如果没有,我们欢迎关于如何解决这个问题的其他建议。

看起来CGI::Session中确实没有内置的方法来解决这个问题。您可能需要创建第二个会话对象来利用会话id生成器,然后将内容移到新的会话对象。简单地更新会话对象中的id将不起作用,因为这不会触发对数据接收器的写入。您可以将其实现为CGI::Session的子类,这样它就成为一个方法,可以替换您已经拥有的对象?是因为你想开始新的课程吗?那就这么做吧@ikegami这与会话固定攻击有关。看看,也许吧。这样做似乎是有道理的,但CGI::Session可能早于此攻击类型被命名的时间。@simbabque,我明白了。但是,如果您接受来自cookie的会话id,则这种类型的攻击不起作用,因为第三方无法为您的站点设置cookie。@simbabque,Re“可能有办法将cookie获取到目标计算机上”,XSS。但如果他们能做到这一点。。。