gpt4 book ai didi

perl - 客户端之间的 CGI::Session 共享 session !

转载 作者:行者123 更新时间:2023-12-04 15:36:58 25 4
gpt4 key购买 nike

当我尝试这个时:

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

我发现不同的客户正在获得相同的 session !什么会导致这种奇怪的 session 共享?

编辑:我无法可靠地重现这一点,但在我的测试中,我看到了我从浏览器中删除 session cookie、刷新页面并且(使用 Firebug 的网络 Pane )看到我没有在请求中发送 cookie 但在响应中使用 获取 Set-Cookie老 session ID!由于使用 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,这意味着其他 session !我不明白这段代码怎么可能是正确的,这是一个非常常用的模块!

最佳答案

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

关于perl - 客户端之间的 CGI::Session 共享 session !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com