0

成功登录后,我在 login.pl cgi 文件中设置会话变量。

use CGI::Session qw();
my $session = CGI::Session->new;
$session->param(User_id => '12345');

我想在另一个 perl cgi 文件中访问相同的 User_id,比如 checkout.pl。我正在使用它来访问 User_id。

use CGI::Session qw();
print $session->param('User_id');

但无法访问此处的值。有人可以帮助我,找出这里出了什么问题。非常感谢您的帮助。

德韦什

4

1 回答 1

3

您需要在第二个请求中重新初始化会话才能使用它:如果没有这个初始化,Perl 将无法“猜测”您所说的$session. 引用文档

当用户单击另一个链接或在片刻后重新访问该站点时,我们是否应该再次创建新会话?绝对不。这将破坏状态维护的整个目的。由于我们已经将 id 作为 cookie 发送,我们只需要在创建会话对象时将该 id 作为 seconds 参数传递:

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

上面的语法将首先尝试初始化现有的会话数据,如果失败(如果会话不存在)创建一个新会话:正是我们想要的。但是如果用户不支持 cookie 怎么办?在这种情况下,我们需要将会话 ID 作为查询字符串附加到所有 url,并在 cookie 之外查找它们:

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

假设您手边有 CGI 对象,您可以将上述两行最小化为一行:

$session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"});
于 2013-10-01T17:08:35.467 回答