On Mar 17, 2011, at 9:45 AM, Anthony wrote:
> On Thursday, March 17, 2011 11:17:17 AM UTC-4, Jonathan Lundell wrote:
> On Mar 17, 2011, at 7:40 AM, Anthony wrote:
>> In the book under "Efficiency Tricks" it says:
>>  
>> Set session.forget() in all controllers and/or functions that do not change 
>> the session.
>>  
>> Does this new change make it unnecessary to bother calling session.forget() 
>> in most cases because sessions are no longer saved when empty or not 
>> modified?
> There's at least one reason to call session.forget(): it unlocks the session 
> file, allowing other requests in the same session to proceed. 
>  
> This won't be useful in all cases, since there may not *be* other requests 
> pending. But it's a very lightweight call, so it doesn't do any harm.
>  
> To unlock the session file, don't you have to call session.forget(request) or 
> session._unlock(request)? Is plain session.forget() (with no arguments) still 
> useful?

session.forget(response), yes.

With no arguments, no, offhand I think it's not useful, unless perhaps the 
session actually got changed, in which case calling forget would (effectively) 
discard the changes.

>  
> It would be helpful to get an understanding of exactly when session files are 
> created, locked, written to, and unlocked as well as the exact effects and 
> use cases for session.forget(), session.forget(request), and 
> session._unlock(request), particularly in light of the recent change in trunk.
> 

I agree, though I think it should be in terms of an API spec rather than a 
description of how it happens to work now, which might lock in accidental 
behavior.

At any rate, if a session file doesn't exist, it gets created lazily, at the 
first point at which it would have to be written. So a series of requests that 
never changes the session object will never create a session file. However, 
since both auth and forms keep state in the session, a session will be created 
when an auth form is used.

Reply via email to