It seems that after call is made to the flush() method, any changes to expire (or the creation of an expire time) are lost. But are only lost if no other params are modified.
After looking at the source to CGI::Session, I noticed that there is no change the the _STATUS flags during a exipre method call.
I believe this is what is causing this.
Thanks,
Andy Trappen