It's not the exception case, what happens is, you've wrapped all of expire_session in the backup.  

Session details aren't restored until *after* the redirect.