我的CGI :: Session安装有什么问题?

时间:2010-02-09 18:05:29

标签: perl perl-module

我在我的主机上安装了CGI :: Session模块,在我的cgi-bin中创建了perl-modules目录,然后将模块解压缩到该目录,所以我有:

D: cgi-bin/perl-modules/CGI/
F: cgi-bin/perl-modules/CGI/Session.pm
D: cgi-bin/perl-modules/CGI/Session/
F: cgi-bin/perl-modules/CGI/Session/File.pm
D: cgi-bin/perl-modules/CGI/Session/ID/
D: cgi-bin/perl-modules/CGI/Session/Searialize/

在我做的脚本中(这位于cgi-bin / test /中):

     use lib '../perl-modules';
     use CGI::Session;
     $session = new CGI::Session (
                "driver:File", 
                undef,
                {Directory => '/tmp'}
            );

$session->param('_logged_in', 1);
$session->param('_remote_ua', $ENV{'HTTP_USER_AGENT'});
$session->expire('+2hr');

一切正常,直到过期的电话。当我将过期调用放入eval中时,我收到以下错误:

Can't locate auto/CGI/Session/File/expire.al in @INC (@INC contains: ../perl-modules /usr/lib/perl5/5.8.7/i686-linux /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i686-linux /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.7/i686-linux /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl .)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

最新的CGI::Session distribution存档没有CGI :: Session :: File - 您必须使用非常旧的版本。在新版本中,您需要在新调用中编写“driver:file”(注意'f'的情况)。

如果您需要那个过时的版本并且无法在托管上安装任何内容,请在本地安装该版本的CGI :: Session,并将“auto / CGI / Session /”目录从%Perl%/ site / lib /复制到托管太。另一个选择是在没有cpan shell的情况下执行make并从blib / arch复制该目录。

答案 1 :(得分:1)

我认为你的问题在于相对路径。假设您的脚本是从Apache或其他Web服务器执行的,这似乎是安全的。在这种情况下,../perl-modules/可能就在任何地方。

在我的网络服务器上,当前工作目录为/usr/local/apache22/,因此../perl-modules/将解析为/usr/local/apache22/../perl-modules/usr/local/perl-modules/。为了克服这个问题,我建议使用绝对路径而不是相对路径。例如:

use lib '/home/user105033/perl-modules/';