use strict; use warnings; use HTTP::Session; use HTTP::Engine; use HTTP::Session::State::Cookie; use HTTP::Session::State::URI; use HTTP::Session::Store::Test; use HTTP::Session::State::MobileAttributeID; use HTTP::MobileAttribute plugins => [ qw/ IS / ]; use String::TT qw/tt strip/; my $store = HTTP::Session::Store::Test->new(); &main; exit; sub main { HTTP::Engine->new( interface => { module => 'ServerSimple', args => { port => 9999, }, request_handler => \&request_handler, } )->run; } sub get_session_state { my $req = shift; my $ma = HTTP::MobileAttribute->new($req->headers); my $gen_cookie_state = sub { HTTP::Session::State::Cookie->new(); }; if ($ma->is_airh_phone || $ma->is_non_mobile) { return $gen_cookie_state->(); } elsif ($ma->user_agent =~ /Google|Yahoo/) { return $gen_cookie_state->(); } else { if ($ma->user_id) { return HTTP::Session::State::MobileAttributeID->new( check_ip => 0, mobile_attribute => $ma, ); } else { return HTTP::Session::State::URI->new(); } } } sub get_session { my $req = shift; my $session = HTTP::Session->new( state => get_session_state($req), store => $store, request => $req, ); } sub request_handler { my $req = shift; my $session = get_session($req); my $count = $session->get('count') || 0; my $html = tt strip q{
count is [% count |html %]