3

ブラウザが閉じられていても、ユーザーがログインする必要がないようにしたい。私の Cookie は 1 か月後に期限切れになるように設定されています。

ユーザーが正常にログインしたとき

 $session = CGI::Session->new (undef, undef, {Directory=>'tmp/'})
                                      or die CGI::Session->errstr;
                $session->param('username', $username);
                $session->expire('+1M');                
                $cookie = $cgi->cookie( -name=>$session->name, -value=>$session->id );
                print $cgi->header(-cookie=>$cookie );

次に、ブラウザを閉じない限りアクセスできる別のページにリダイレクトされます。これは、2 ページ目のコードです。

my $cookie = $cgi->cookie('CGISESSID');
if ($cookie){
        print $cgi->header(-cookie => $cookie);
else{
       //ask them to relog in
}

tmp/ に作成されたセッションを確認できます。ブラウザを閉じた後に既存の Cookie をロードするにはどうすればよいですか。ユーザー/ブラウザに基づいてロードするセッションを知るにはどうすればよいですか?

4

1 に答える 1

3

Cookie に将来の有効期限を設定している限り、ユーザーがブラウザーを再起動した後も保持されます (もちろん、その日付より前に再起動する限り)。クッキーをロードするには、あなたがしていることを正確に行います:

my $cookie = $cgi->cookie('CGISESSID');

Cookie を使用して既存のセッションをロードするには、CGI オブジェクトをnewCGI::Session のメソッドに渡すだけです。

my $session = new CGI::Session(undef, $cgi, {Directory=>"/tmp"});

これは、CGI リクエストで渡された Cookie を使用して既存のセッションを初期化しようとします。存在しない場合は、新しいセッションが作成されます。これは、Cookie 名がCGISESSID. 別の名前を使用するには、次を実行します。

CGI::Session->name("MY_SID");
# or
$session->name("MY_SID");

$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});

まだ読んでいない場合は、CGI::Session チュートリアルを一読することをお勧めします。


編集:セッションは 1 か月で期限切れになるように設定されていました

$session->expire('+1M');

しかし、クッキーはそうではありませんでした。Cookie に有効期限を設定しない場合、ブラウザーは Cookie をメモリに保存しますが、ディスクには保存しません。ブラウザを閉じるとすぐに、Cookie は消えます。Cookie の有効期限を設定するには、次のようにします。

$cookie = $cgi->cookie( -name=>$session->name, -value=>$session->id, -expires=>'+1M' );
于 2013-09-25T17:46:00.417 に答える