Как получить доступ к переменной сеанса в другом файле perl

После успешного входа в систему я устанавливаю переменную сеанса в cgi-файле login.pl.

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

Я хочу получить доступ к тому же User_id в другом файле perl cgi, скажем, checkout.pl. Я использую это для доступа к User_id.

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

Но не удалось получить доступ к значению здесь. Может ли кто-нибудь помочь мне понять, что здесь не так. Ваша помощь высоко ценится.

Девеш


person Devesh Agrawal    schedule 01.10.2013    source источник


Ответы (1)


Вам нужно повторно инициализировать сеанс во втором запросе, чтобы использовать его: без этой инициализации Perl не сможет «догадаться», что вы подразумеваете под $session. Цитирование документа:

Когда пользователь щелкает другую ссылку или повторно посещает сайт через некоторое время, должны ли мы снова создавать новый сеанс? Точно нет. Это разрушило бы всю цель поддержания государства. Поскольку мы уже отправляем идентификатор в виде файла cookie, все, что нам нужно, это передать этот идентификатор в качестве аргумента секунд при создании объекта сеанса:

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

Приведенный выше синтаксис сначала попытается инициализировать данные существующего сеанса, если это не удастся (если сеанс не существует), создаст новый сеанс: именно то, что мы хотим. Но что, если пользователь не поддерживает файлы cookie? В этом случае нам нужно будет добавить идентификатор сеанса ко всем 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"});
person raina77ow    schedule 01.10.2013