2013-10-01 2 views
0

После успешного входа в систему я устанавливаю переменную сеанса в файле cgi. Login.pl.Как получить доступ к переменной сеанса в другом файле perl

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

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

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

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

Devesh

ответ

3

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

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

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

выше синтаксис будет первым попробовать инициализировать существующий сеанс данные, если они сбой (если сеанс не существует) создает новый сеанс : именно то, что мы хотим. Но что, если пользователь не поддерживает куки? В этом случае мы должны были бы добавить идентификатор сессии для все URL-адреса в качестве строки запроса, и искать их в дополнении к печенью:

$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"}); 
Смежные вопросы