两个 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;
这里只显示了一个脚本,但显然没有什么可以阻止两个脚本访问同一个会话(如果它们可以访问同一个会话存储)。
我在我的网站中使用了两个 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;
这里只显示了一个脚本,但显然没有什么可以阻止两个脚本访问同一个会话(如果它们可以访问同一个会话存储)。