无法在未定义的值上调用方法“id”

时间:2013-05-31 03:27:00

标签: perl session

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

我有这段代码:

    #!/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。不知道为什么它现在引起了一个短暂的错误,但那就是重点。

1 个答案:

答案 0 :(得分:1)

$sessionundef,这意味着new返回了undef。文档有以下内容可以说:

  

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

请致电CGI::Session->errstr以了解问题所在。