in reply to Delete expired CGI::Session files

I don't understand how you get from newly declared $D to $D->{ _SESSION_ETIME }, etc. Can you explain what eval does in this case?

my $D;
eval( $data );

if ( time() >= $D->{ _SESSION_ETIME } ...


thanks

Replies are listed 'Best First'.
Re: Re: Delete expired CGI::Session files
by LTjake (Prior) on Nov 12, 2003 at 18:47 UTC

    Generaly, session files look something like this:

    $D = { "_SESSION_EXPIRE_LIST" => {}, "_SESSION_REMOTE_ADDR" => "127.0.0.1", "_SESSION_ATIME" => "1057334715", "_SESSION_CTIME" => "1057334688", "_SESSION_ID" => "2edc038f30ed95d3bd43f113b5385a5d", "_SESSION_ETIME" => undef };

    (Note, I've added some formatting. It's usually just one long line.)

    As you can see it's a dumped (see Data::Dumper) data structure. It starts off with an assignment to $D. When using strict you have to declare your variables. Thus my $D; before the eval.

    By eval()ing, I'm executing that code, thus doing the assignment to $D.

    Check this out:

    use strict; local $/; my $D; eval( <DATA> ); print $D->{ _SESSION_ID }; __DATA__ $D = { "_SESSION_EXPIRE_LIST" => {}, "_SESSION_REMOTE_ADDR" => "127.0.0.1", "_SESSION_ATIME" => "1057334715", "_SESSION_CTIME" => "1057334688", "_SESSION_ID" => "2edc038f30ed95d3bd43f113b5385a5d", "_SESSION_ETIME" => undef };

    Try commenting out my $D;. You'll get an error.

    HTH

    --
    "To err is human, but to really foul things up you need a computer." --Paul Ehrlich

      Crystal-clear now that I see the contents of a session file! Thanks