繁体   English   中英

两个Perl脚本之间的cgi会话

[英]cgi sessions between two Perl scripts

我在我的网站上使用了两个Perl脚本。 我在侧面找到了一个搜索字段,该字段调用了第一个脚本,结果被写入输出文件中。 下次单击时,用户将调用第二个脚本,该脚本将读取输出文件并根据用户搜索来构建配置文件。 目前我只是在输出文件上写,但我需要使用会话ID来个性化此文件。

我正在使用CGI :: Session进行尝试,但是我不理解如何使用这两个Perl脚本来实现这一点。 我认为我需要比较会话ID,并为每个会话编写输出文件。

你们中的一个人知道如何做到吗?

第一个脚本:我将会话写入文件中:

my $session = new CGI::Session(undef, $cgi, {Directory=>"/usr/local/path/"});

然后将cookie发送给客户端:

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

第二个脚本:尝试获取会话ID:

$sid = $cgi->cookie("CGISESSID") || undef;
print $sid 

Status: 500

您需要将会话ID传递给客户端,以便客户端在以后的请求中将其提供给您。 通常使用cookie完成此操作。

use utf8;
use open ':std', ':encoding(UTF-8)';

use CGI          qw( -utf8 );
use CGI::Session qw( );

use constant SESSION_DIR    => '...';
use constant SESSION_EXPIRE => '+12h';  # From last use (not creation)

my $cgi = CGI->new();

my $session = CGI::Session->new(
   'driver:file',
   scalar($cgi->cookie('session_id')),
   { Directory => SESSION_DIR },
);
$session->expire(SESSION_EXPIRE);

# Whatever your page does
my $count = $session->param('count');
++$count;
$session->param(count => $count);
my $content = "This is request $count";

print
   $cgi->header(
      -type    => 'text/html',
      -charset => 'UTF-8',
      -cookie => $cgi->cookie(
         -name => 'session_id',
         -value => $session->id,
         -expires => SESSION_EXPIRE,
       ),
   ),
   $content;

这里只显示了一个脚本,但是显然没有什么可以阻止两个脚本访问同一会话(如果它们可以访问同一会话存储)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM