[Zope-dev] Test request: ZSession - ZPatterns basedsession manager
mike
mike@if-site.com
Tue, 20 Jun 2000 22:51:43 +0800
"Phillip J. Eby" wrote:
>
> At 08:58 PM 6/19/00 +0800, mike wrote:
> >
> >http://www.zope.org/Members/RainDog/ZSession/ZSession-0.0.2.tar.gz/view
> >
> >Comments?
> >
>
> Now that I've had a chance to really look at this (while tracking down one
> of the bugs you found), I do have a few comments.
>
> First, nice job... It's a good adaptation use of ZPatterns. I do have
Thanks.
> some suggestions for fine tuning, though.
>
> * Rather than putting property manipulation functions right into the base
> Session class, I would simply let users derive ZClasses of their own from
> Session. They could then actually give the Session a UI of its own, for
I put those get/set/has stuff just for make easier life of some lazy
people (like me :-)
> example. Think of someone creating a Session subclass called "Shopping
> Cart", with methods for viewing, checking out, adding/deleting items, etc.
> Or, if they have many subsystems which want to share the same Session
> objects, they could do this by having each subsystem use a different
> propertysheet of the same Session object.
Well, well, well. As for me, beter I've set up a Client abstraction
which have access to CartManager and store cart_id in the session
object. Mixing Session and Cart is not a good idea just because Client
can have several carts, for example. The composition is better than
inheritance in this case, Phillip :-)
> IMHO, the basicSheet stuff you've done, while convenient, encourages
> developers to take the quick-and-dirty route of just using the Session as a
> place to store variables - and that throws away a lot of the usefulness of
> ZPatterns. For one thing, you've guaranteed that Sessions have to be
> stored as persistent objects in the ZODB, or at least that the basicSheet
> has to support arbitrary properties.
But without this stuff people will have to code ZClasses each time they
want sessions. Hmm... I guess the best way is splitting current session
class into two - simple Session and LazySession.
> * Make dead session removal something that doesn't happen automatically, or
> at least have an option to do so. Your default deletion algorithm would be
> very expensive when executed against a non-ZODB database, and would be more
> efficiently done a few times a day in large batches by a cron job.
Moreover, I found a bug which causes infinite loop :-( You're right,
automatic removal should be optional. Will be fixed in 0.0.3 release.
>
> * Delegate determining which sessions are dead to the Rack, rather than
> doing it in the Specialist. This allows an SQL implementation to make use
> of indexes. Specifically, make removeDead call:
>
> self._getSource().findIdleSessions(self.session_ttl)
>
> And then provide a default implementation of findIdleSessions() in the
> Specialist. (Btw, please note that your current implementation absolutely
> requires that at least *some* session data be stored persistently in the
> ZODB, which if you're using a FileStorage, is a bad place for it to be.)
> Now, the whole thing works the same way when first installed, but if
> someone implements the session ID and lastAccessed attributes in an SQL
> database, they can substitute a different implementation for
> findIdleSessions() by putting it in the Rack.
Agree with you completely.
Thanks,
Mike