0

最近我的托管公司更新了他们的服务器,我相信我的代码效率低下正在被曝光。

我有这个代码:

    #!/usr/bin/perl

    use CGI qw(:standard);
    use CGI::Session;

    $cgi = new CGI;

    $sid = $cgi->cookie("CGISESSID") || undef;
    $session = new CGI::Session(undef, $sid, {Directory=>'/tmp'});
    $cookie = $cgi->cookie(CGISESSID => $session->id);
    $sSid = $session->id();

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

    print  << "EOF";
    HTML CODE
    EOF

这很好,直到(似乎)更新 - 现在我在我的日志中收到这个错误:

  • 无法在 /home/users/web/XXXX/my-file.cgi 第 10 行的未定义值上调用方法“id”。

然后我将其编辑到第 10 行:

    $cookie = $cgi->cookie(CGISESSID => $session->id) || undef;

认为它会解决这个问题,但它没有。

它似乎导致了一个短暂的 500 服务器错误,然后该站点重新上线,会话 ID 在错误中持续存在。

我完全不知道发生了什么。更糟糕的是,并不是每次页面加载时都会发生这种情况——它看起来很随机,但我确信我只是没有遇到导致该错误的具体情况。

在过去的 7 年里,我一直在为我所有的 cgi 使用相同的设置。不知道为什么它现在会导致一个短暂的错误,但这不是重点。

4

1 回答 1

1

$sessionundef,所以这意味着new返回undef。文档对此有以下说法:

返回新的会话对象,失败时返回 undef。错误消息可通过 errstr() - 类方法访问。

所以打电话CGI::Session->errstr问问是什么问题。

于 2013-05-31T03:33:34.923 回答