my
$sess_dir
= File::Temp::tempdir(
CLEANUP
=> 1 );
my
$store
= Plack::Session::Store::File->new(
dir
=>
$sess_dir
);
plugin
SessionStore
=>
$store
;
get
'/'
=>
sub
{
my
$self
=
shift
;
my
$name
=
$self
->session(
'name'
) ||
'anonymous'
;
my
$message
=
$self
->flash(
'message'
);
my
$text
= (
$message
)
?
"$name: $message"
:
"Welcome $name!"
;
$self
->render_text(
$text
);
} =>
'index'
;
get
'/login'
=>
sub
{
my
$self
=
shift
;
my
$name
=
$self
->param(
'name'
);
$self
->session(
name
=>
$name
);
$self
->session_options->{change_id}++;
$self
->redirect_to(
'index'
);
} =>
'login'
;
get
'/flash/:message'
=>
sub
{
my
$self
=
shift
;
my
$message
=
$self
->param(
'message'
);
$self
->flash(
message
=>
$message
);
$self
->redirect_to(
'index'
);
} =>
'message'
;
get
'/logout'
=>
sub
{
my
$self
=
shift
;
$self
->session_options->{expire} = 1;
$self
->redirect_to(
'login'
);
} =>
'logout'
;
my
$t
= Test::Mojo->new;
$t
->ua->max_redirects(5);
$t
->reset_session->get_ok(
'/login'
)->status_is(200)->content_is(
'Welcome anonymous!'
);
ok
$t
->tx->res->cookie(
'mojolicious'
)->expires,
'session cookie expires'
;
my
$prev_cookie_value
=
$t
->tx->res->cookie(
'mojolicious'
)->value;
my
(
$prev_session_key
) =
split
/--/,
$prev_cookie_value
, 2;
ok (-e File::Spec->catfile(
$sess_dir
,
$prev_session_key
));
$t
->get_ok(
'/login?name=sri'
)->status_is(200)->content_is(
'Welcome sri!'
);
my
$cookie_value
=
$t
->tx->res->cookie(
'mojolicious'
)->value;
isnt
$cookie_value
,
$prev_cookie_value
;
my
(
$session_key
) =
split
/--/,
$cookie_value
, 2;
ok !(-e File::Spec->catfile(
$sess_dir
,
$prev_session_key
));
ok (-e File::Spec->catfile(
$sess_dir
,
$session_key
));
is
$store
->fetch(
$session_key
)->{name},
'sri'
;
$t
->get_ok(
'/'
)->status_is(200)->content_is(
'Welcome sri!'
);
$t
->get_ok(
'/flash/hello'
)->status_is(200)->content_is(
'sri: hello'
);
$t
->get_ok(
'/'
)->status_is(200)->content_is(
'Welcome sri!'
);
$t
->get_ok(
'/logout'
)->status_is(200)->content_is(
'Welcome anonymous!'
);
my
$new_cookie_value
=
$t
->tx->res->cookie(
'mojolicious'
)->value;
isnt
$new_cookie_value
,
$cookie_value
;
my
(
$new_session_key
) =
split
/--/,
$new_cookie_value
, 2;
ok !(-e File::Spec->catfile(
$sess_dir
,
$session_key
));
ok (-e File::Spec->catfile(
$sess_dir
,
$new_session_key
));
$t
->get_ok(
'/'
)->status_is(200)->content_is(
'Welcome anonymous!'
);
is
$t
->tx->res->cookie(
'mojolicious'
)->value,
$new_cookie_value
;
$t
->get_ok(
'/logout'
)->status_is(200)->content_is(
'Welcome anonymous!'
);
done_testing;