登录成功后,我在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
答案 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"});