加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – CGI ::客户之间的会话共享会话!

发布时间:2020-12-15 23:37:00 所属栏目:大数据 来源:网络整理
导读:当我尝试这个时: while (my $cgi = new CGI::Fast) { ... my $session = CGI::Session-new(undef,$cgi); ... } 我发现不同的客户正在进行相同的会话!什么会导致这个奇怪的会话共享? 编辑:我无法可靠地重现这一点,但在我的测试中,我看到过从浏览器中删除
当我尝试这个时:

while (my $cgi = new CGI::Fast) {
    ...
    my $session = CGI::Session->new(undef,$cgi);
    ...
 }

我发现不同的客户正在进行相同的会话!什么会导致这个奇怪的会话共享?

编辑:我无法可靠地重现这一点,但在我的测试中,我看到过从浏览器中删除会话cookie,刷新页面以及(使用Firebug的Net窗格)看到我没有发送cookie的情况.请求,但在响应中使用旧会话ID获取Set-Cookie!由于使用FastCGI,可能会在内存中出现问题?

(注意:我从这个问题的早期版本中删除了第二段代码,因为我不再确定它是否相关)

编辑:这http://osdir.com/ml/web.fastcgi.devel/2004-02/msg00007.html似乎描述了我所看到的行为

编辑:
如上面的osdir.com帖子所述,FCGI.pm包含以下代码:

for (keys %FCGI::ENV) {
    $ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
}

这看起来很明显是我眼中的缺陷.只要当前请求不为给定变量提供值,它就会从环境变量的持久副本复制到脚本可见的环境副本中.因此,如果请求没有cookie,那么它将找不到定义的HTTP_COOKIE,因此它将为脚本提供发送它们的最后一个请求的cookie,这意味着其他会话!我不明白这段代码怎么可能是正确的,这是一个非常高度使用的模块!

解决方法

我在七个月前修复了这个 bug,你需要将CGI.pm升级到> = 3.56. CGI :: Fast使用的FCGI API在十多年前已被弃用并从文档中删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读