in reply to Cleaning up sessions created by Apache::Session::File when logging out of a CGI application
The problem is not with your code, it is that Apache::Session::File does not work in Taint mode.
The problem is that the session ID is stored along with the session itself. When you go to delete the session, it first loads the session from disk and unserializes it. This overwrites the session ID you passed it with the one it found in the file (they are both identical so it shouldn't matter). The problem is, the session ID is now tainted.
A quick fix for this is for you to untaint the session ID yourself after the session has been unserialized. Put the following two lines after you tie the session:
$session{_session_id} =~ /^([a-zA-Z0-9]+)$/; $session{_session_id} = $1;
This probably should be fixed in Apache::Session itself as I am sure other people will run into it.
By the way, you really shouldn't be using Apache::Session::File anyway for performance reasons. At least use Apache::Session::DB_File which most likely doesn't suffer from this taint problem and will be much quicker.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Cleaning up sessions created by Apache::Session::File when logging out of a CGI application
by Joey The Saint (Novice) on Feb 09, 2003 at 18:30 UTC | |
by cees (Curate) on Feb 10, 2003 at 15:32 UTC | |
by Joey The Saint (Novice) on Feb 10, 2003 at 19:31 UTC |