Şimdi benim app.psgi
(basitleştirilmiş) içerir:Plack :: Middleware :: Session tarafından yönetilen bir çerez için son kullanma süresi nasıl ayarlanır?
builder {
enable 'Session', store => 'File'; #default uses Plack::Session::State::Cookie
$app;
};
Daha sonra $app
içinde kullanıyorum:
- :
my $req = Plack::Request->new($env); my $session = $req->session(); #returns env->{'psgix.session'} $session->{user} = "name";
O Tamam, mesela işleri kullanıcı oturum açtığında, adını sunucu tarafında saklanan oturum dosyasında saklıyorum ve Plack::Middleware::Session imple session-state-cookie,
- ve kullanıcı tarayıcıyı kapattığında, çerez otomatik olarak silinir (varsayılan olarak Plack::Session::State::Cookie, çerez için herhangi bir son kullanma tarihi ayarlamamıştır).
Şimdi, giriş panelimde "Beni hatırla" özelliğini uygulamak istiyorum. Bu durumda, sesion-state-cookie otomatik olarak tarayıcıdan kaldırılmamalıdır. Bu, Plack::Session::State::Cookie'dan expires
yöntemini kullanarak yapılabilir.
soru: Benim $app
den (Session katman tarafından yönetilen) çerez sona erme nasıl değişebileceği
. Başka bir deyişle, nasıl biraz burada yöntemini sona çağırmak için:
my $req = Plack::Request->new($env);
my $session = $req->session(); #returns env->{'psgix.session'}
$session->{user} = "name";
my $cookie_state = WHAT_TO_DO_HERE_TO_GET; #the current Plack::Session::State::Cookie object
$cookie_state->expire(86400*14); #expire in two weeks
birisi burada, gereken bir çalışma örneği ise.
use strict;
use warnings;
use Plack::Request;
use Plack::Response;
use Plack::Builder;
use Data::Dumper;
my $app = sub {
my $env = shift;
my $req = Plack::Request->new($env);
my $session = $req->session;
my $res = Plack::Response->new(200);
$res->content_type('text/html');
my $link = $session->{user}
? q{ <a href="/logout">logout</a>}
: q{ <a href="/login">login</a>}
;
$res->body(["Session user:", $session->{user}, "<br>$link"]);
return $res->finalize;
};
my $login = sub {
my $env = shift;
my $req = Plack::Request->new($env);
my $session = $req->session;
$session->{user} = "some";
#how to set here the session-state-cookie expiration?
my $res = Plack::Response->new();
$res->redirect("/", 302);
return $res->finalize;
};
my $logout = sub {
my $env = shift;
my $req = Plack::Request->new($env);
my $session = $req->session;
delete $session->{user};
my $res = Plack::Response->new();
$res->redirect("/", 302);
return $res->finalize;
};
builder {
enable 'Session', store => 'File';
mount "/login" => $login;
mount "/logout" => $logout;
mount "/favicon.ico" => sub { return [ 404, ['Content-Type' => 'text/html'], [ '404 Not Found' ] ] };
mount "/" => $app;
};
bunu * *Eserleri**. Sorum şu, bu nerede belgelendi? Çünkü "psgix.session.options" için Plack :: Middleware :: Session [bazı alt anahtarlar belgelenmiştir] (https://metacpan.org/pod/Plack::Middleware::Session#PLACK-REQUEST-OPTIONS) ama 'expires' eksik. (Burada sadece "son kullanma"/çoğul (lar) olmadan/oturumu geçersiz kılan şey). Gerçekten bunu nereden biliyorsun merak ediyorsun. Modül kaynaklarında kazarak? Neyse ** çok teşekkür ederim. – kobame
@kobame Evet, bunu kaynak koduna bakarak biliyorum. Eksik belgelerle ilgili bir [GitHub sorunu] (https://github.com/plack/Plack-Middleware-Session/issues/33) açtım. – nwellnhof
Cevabınız için teşekkür etmek istedim; Bunu uygulamamda bir deneyin. Github sorununun herhangi bir faaliyeti olmamıştır ve kullandığım çerçeve (Kelp) bunun etrafında herhangi bir seçeneğe sahip değildir. – saberworks