如何访问另一个perl文件中的session变量

uurv41yg  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(161)

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

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

我想访问另一个perl cgi文件中的同一个User_id,比如checkout.pl。

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

但无法访问这里的值。有人能帮我,在找出什么是错误的这里。您的帮助是非常感谢。
德韦什

mefy6pfw

mefy6pfw1#

您需要在第二个请求中重新初始化会话以使用它:如果没有这个初始化,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"});

相关问题