use strict; use warnings; use Test::More tests => 15; use HTTP::Session; use HTTP::Session::State::Test; use HTTP::Session::State::Null; use HTTP::Session::Store::Test; use CGI; my $store = HTTP::Session::Store::Test->new( data => { FOOBAR => { foo => 'bar', } } ); sub gen_session ($) { my $sid = shift; HTTP::Session->new( state => HTTP::Session::State::Test->new(session_id => $sid), store => $store, request => CGI->new(), ); } sub { my $session; $session= gen_session('FOOBAR'); is $session->get('foo'), 'bar'; is $session->session_id, 'FOOBAR'; $session->regenerate_session_id(); $session->set('hoge', 'fuga'); like $session->session_id, qr/^[a-z0-9]{32}$/; my $newsessid = $session->session_id; undef $session; $session = gen_session('FOOBAR'); is $session->get('foo'), 'bar'; is $session->get('hoge'), undef, 'do not pass to old session'; undef $session; $session = gen_session($newsessid); is $session->get('foo'), 'bar', 'new session contains old session data'; is $session->get('hoge'), 'fuga', 'new session contains new session data'; undef $session; }->(); sub { my $session; $session= gen_session('FOOBAR'); is $session->get('foo'), 'bar'; is $session->session_id, 'FOOBAR'; $session->regenerate_session_id(1); $session->set('hoge', 'fuga'); like $session->session_id, qr/^[a-z0-9]{32}$/; my $newsessid = $session->session_id; undef $session; $session = gen_session('FOOBAR'); is $session->get('foo'), undef; is $session->get('hoge'), undef, 'do not pass to old session'; like $session->session_id, qr/^[a-z0-9]{32}$/; undef $session; $session = gen_session($newsessid); is $session->get('foo'), 'bar', 'new session contains old session data'; is $session->get('hoge'), 'fuga', 'new session contains new session data'; undef $session; }->();