Apache::Session only saves the data when it gets destroyed. If you put it in a global, it never gets destroyed. The session modules for Mason on CPAN work around this by explicitly destroying %session. I'd suggest you use one of them instead of building your own.