/
article3-3.psgi
62 lines (51 loc) · 1.22 KB
/
article3-3.psgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/plackup
use strict;
use warnings;
use Plack::Request;
use Plack::Response;
use HTML::Tiny;
my $app = sub {
my $name;
my $logged;
my $req = Plack::Request->new(shift);
my $res = Plack::Response->new(200);
if ($req->parameters->{login}) {
$logged = 1;
$name = $req->parameters->{name};
$res->cookies->{name} = {
value => $name,
expires => '+1y',
};
} elsif ($req->parameters->{logout}) {
$logged = 0;
$name = 'Guest';
$res->cookies->{name} = {
value => '',
expires => '-1d',
};
} else {
$logged = defined $req->cookies->{name};
$name = $req->cookies->{name} || 'Guest';
}
$name =~ s/</</g;
my $h = HTML::Tiny->new;
my $form;
if ($logged) {
$form = $h->p(
$h->input({ type => 'submit', name => 'logout', value => 'logout' }),
);
} else {
$form = $h->p([
$h->p('Enter your name: ' . $h->input({ name => 'name' })),
$h->input({ type => 'submit', name => 'login', value => 'Set name' }),
]);
}
my $body = $h->html([
$h->h1('Cookies'),
$h->p('This is a cookie test page'),
$h->p([ 'Hello ', $h->b($name) ]),
$h->form($form),
]);
$res->body($body);
return $res->finalize;
};