use Apache::Cookie; use Apache::Session::File; # Inside your mod_perl handler my $cookie = Apache::Cookie->new($r, -name => 'session_id', -expires => '+1D', -domain => 'mysite.com', -path => '/' ); my %session; my $session_id = $cookie->value; # The tie will fail if the session_id isn't valid or is missing. Thus the need for eval. eval { tie(%session,'Apache::Session::File',$session_id, { Directory => '/tmp', LockDirectory => '/tmp' }); }; if ($@) { # bogus session_id. Setting it to undef will cause Apache::Session to create a new one undef $session_id; tie(%session,'Apache::Session::File',$session_id, { Directory => '/tmp', LockDirectory => '/tmp') || die "say something useful"; } if ($session_id != $cookie->value) { # session id has changed or is a new one; update the cookie $cookie->value($session_id); $cookie->bake; } # use %session at will to store user data. $session{'name'} = 'John Doe'; $session{'user_id'} = 123; my $value = $session{'some_data'}; # untie the session after you're done with it untie %session;