0

ログインに成功したら、login.pl cgi ファイルでセッション変数を設定しています。

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

別の perl cgi ファイル (checkout.pl など) で同じ User_id にアクセスしたいと考えています。これを使用して User_id にアクセスしています。

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

しかし、ここでは値にアクセスできません。ここで何が間違っているのかを理解するのに、誰かが私を助けることができますか? あなたの助けは非常に高く評価されています。

デベシュ

4

1 に答える 1

3

セッションを使用するには、2 番目のリクエストでセッションを再初期化する必要があります$sessionドキュメントの引用:

ユーザーが別のリンクをクリックするか、しばらくしてサイトに再度アクセスした場合、新しいセッションを再度作成する必要がありますか? 絶対違う。これは、状態維持の目的全体を無効にします。すでに ID を Cookie として送信しているため、セッション オブジェクトを作成するときに、その ID を秒引数として渡すだけで済みます。

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

上記の構文は、最初に既存のセッション データの初期化を試みます。失敗すると (セッションが存在しない場合)、新しいセッションが作成されます。しかし、ユーザーが Cookie をサポートしていない場合はどうなるでしょうか。その場合、すべての URL にセッション ID をクエリ文字列として追加し、cookie に加えてそれらを探す必要があります。

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

CGI オブジェクトが手元にあると仮定すると、上記の 2 行を 1 行に最小化できます。

$session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"});
于 2013-10-01T17:08:35.467 に答える