如何在另一个perl文件中访问会话变量

时间:2013-10-01 17:04:27

标签: perl session

登录成功后,我在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');

但是无法在此处访问该值。有人可以帮助我,弄清楚这里有什么问题。非常感谢您的帮助。

Devesh

1 个答案:

答案 0 :(得分:3)

您需要在第二个请求中重新初始化您的会话才能使用它:如果没有初始化,Perl将无法“猜测”$session的含义。引用the doc

  

当用户点击其他链接或在短片后重新访问该网站时   我们应该再次创建一个新的会话吗?绝对不。这个   会破坏国家维护的整个目的。既然我们已经   将id作为cookie发送,我们所需要的只是将该id作为秒传递   创建会话对象时的参数:

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

上述语法将首先尝试初始化现有会话   数据,如果失败(如果会话不存在)则创建一个新数据   会议:正是我们想要的。但是如果用户不支持该怎么办呢   饼干?在这种情况下,我们需要将会话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"});