[Perl] PSGI 입문 제2장 CGI::Session을 PSGI로 무리하게 사용
이 기사에는 문제가 있습니다.
여기을 읽어보십시오.
오늘의 주제 : CGI :: Session을 PSGI로 무리하게 사용
코 ## 오사라이
코 ## 오사라이
배경
PCGI 사용해야합니까 Mojolicious 사용해야하는지 고민했습니다.
해보았다.
결론부터 먼저 쓰면 이렇게 됩니다.
Myapp.pl
use strict;
use warnings;
use Carp;
use Plack::App::Path::Router::PSGI;
use Path::Router;
use Plack::Request;
use CGI::Session;
my $session = CGI::Session->new( undef, undef, { Directory => './sessions' } ); # ダミーのセッション
my $sid = $session->param('CGISESSID') || undef;
$session->delete(); # ダミーはすぐ消す
$session = CGI::Session->new( undef, $sid, { Directory => './sessions' } ); # 本セッション
if ( $session->is_expired() ) { # 期限切れを消して再発行
$session->delete();
$session = CGI::Session->new( undef, undef, { Directory => './sessions' } );
}else{
$session->expire('+1d');
}
my $router = Path::Router->new;
$router->add_route( '/' => target => \&root );
$router->add_route( '/env' => target => \&env );
# now create the Plack app
my $app = Plack::App::Path::Router::PSGI->new( router => $router );
$app->to_app();
sub root {
my $env = shift;
my $req = Plack::Request->new($env);
my %param = %{ $req->body_parameters };
if( exists $param{'action'} and $param{'action'} eq 'forget' ) {
$session->param( 'str', '' );
}elsif( exists $param{'str'} ){
$session->param( 'str', $param{'str'} );
}
my $str = $session->param('str') || '';
return response( $env, <<"END");
<html><body>
<h1>セッション管理してみる</h1>
<form method="POST" action="/" enctype="multipart/form-data">
<input type="text" name="str" value="$str">
<button type="submit" name="action" value="remember">記憶</button>
<button type="submit" name="action" value="forget">消去</button>
</form>
</body></html>
END
}
sub env {
my $env = shift;
my @str;
while ( my ( $key, $value ) = each %$env ) {
push @str, "$key = $value" unless ref $value;
}
return response( $env,
join( "<br>\n", '<html><body><h1>環境変数一覧</h1>', sort(@str), '</body></html>')
);
}
# サブルーチン
sub response {
my $env = shift;
my $body = shift || croak 'empty body!';
my %ARG = @_ if @_;
my $status = $ARG{'-status'} || 200;
croak "unvalid status: $status" if $status !~ /^\d{3}$/s;
my $mime = $ARG{'-MIME'} || 'text/html; charset=utf-8';
my $headers = $ARG{'-headers'} || {};
my $req = Plack::Request->new($env);
my $res = $req->new_response($status);
$res->content_type($mime);
$res->header(
'Set-Cookie' => $session->cookie,
%$headers
);
$res->body($body);
$res->finalize;
}
결론, Set-Cookie 헤더에
$session->cookie
건네줄 뿐 3 뭐죠. 전혀, 과거의 자산 인계합니다. 전회 소개했다 환경 변수 목록이 몰래 /env로 라우팅됩니다. 점도 주목이에요!네, 간단하죠? 당신도 시작하자! PSGI!
다음 장
홍보
이 기사는 자발적으로 유료 웹 서비스를 Perl로 쓰고 출시하는 것에 가까워서, 집착한 점이나 눈치채는 것을 공유하는 목적으로 쓰기 시작했습니다.
이 QR 코드를 스마트폰으로 읽고,
흥미를 가진 분은 h tps : // q로 w응. 메까지 꼭 들러 주세요!
Plack::Middleware::Session에 따르면, expire()
조차 단순한 delete
밖에 없다. ↩
GitHub 에 정중한 일본어 번역이 있습니다. ↩
Plack::Response 에는 cookies
메소드가 있지만, 어느 쪽인가 하면 원시 쿠키파의 사양으로, 세션 관리에는 적합하지 않다. ↩
Reference
이 문제에 관하여([Perl] PSGI 입문 제2장 CGI::Session을 PSGI로 무리하게 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/worthmine/items/987ac1e422348b9f0ea5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Perl] PSGI 입문 제2장 CGI::Session을 PSGI로 무리하게 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/worthmine/items/987ac1e422348b9f0ea5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)