[albatross-users] SessionAppContext handling session timeout / deleting.

Tyler Retzlaff rtr at softelsystems.com.au
Mon Jun 25 14:02:44 EST 2007


Ah yes I surface again.  Sorry for the delayed response I have a lot  
on my
plate these days.

This is exactly what I am observing and barring any better solution..  
Andrew?
I'l do what you suggest.

Thanks

On 14/06/2007, at 10:12 AM, Greg Hamilton wrote:

> On Tue, Jun 05, 2007 at 12:12:24AM +1000, Andrew McNamara wrote:
>   | >I'm using SessionAppContext/SimpleSessionApp for server side   
> sessions.
>   | >After a server session times out and I receive a subsequent  
> request from a
>   | >client  (which had a session) as a result a SessionExpired  
> exception is
>   | >raised (quite correctly  since it timed out) which I guess I  
> have to catch
>   | >at app.run(Request()).
>   | >
>   | >What is the right way to delete the old session and return a  
> selected
>   | >template page?  I notice your FAQ has an entry describing how  
> to delete a
>   | >session  when I have a handle to the context.  But in this  
> case I don't
>   | >have a handle to the  context because of where I am handling  
> the exception
>   | >and presumably because if it is  expired it never got  
> instantiated for
>   | >that request...
>   | >
>   | >Feel free to point me to relevant documentation (I did look  
> but  nothing
>   | >jumped out at me that seemed appropriate) but I am new to  
> Albatross and
>   | >may have  missed it.
>   |
>   | Hmmm, tricky. There's no need to delete the session, since it's  
> already
>   | gone: I suspect what you should do is replace the default  
> exception page
>   | with a friendlier version for this specific exception.
>   |
>   | The Application classes call their handle_exception() method  
> when the run
>   | method raises an exception - you could subclass the Application  
> class
>   | you've chosen, and add your own handle_exception method that  
> presents
>   | your chosen template.
>   |
>   | Have a look at Application.handle_exception() in albatross/ 
> app.py -
>   | you'll basically want to do something very similar to what's  
> there.
>   |
>   | If you think overloading the albatross method is against the  
> rules,
>   | don't worry - this is the way Albatross is intended to be used  
> (which
>   | is why all manner of "internal" methods are documented).
>   |
>
> I've been bitten by this before. The default handle_exception removes
> the session for any unhandled exception. The browser still has a  
> cookie
> identifying the removed session. All subsequent requests result in a
> SessionExpired exception.
>
> I work around this by removing the session and creating a new session
> before I run the template which reports the error.
>
> Something like this ...
>
>     def handle_exception(self, ctx, req):
>         ctx.remove_session()
>         ctx.new_session()
>         ctx.reset_content()
>         self.save_session(ctx)
>         ctx.run_template('unhandled_exception.html')
>         ctx.flush_content()
>
> I'm sure Andrew will be appalled by this and suggest a far superior
> solution.
>
> Greg Hamilton
> Object Craft
>




More information about the Albatross-users mailing list