seaside et WASession

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

seaside et WASession

Sylvain pralon
Hello,

I have developped a Seaside application and I just want to know how can
I get the session which are currently active.
In fact when I opened my browser I see a new instance in ( MyWAComponent
allInstances ).
But when I close my browser, this instance is not remove from (
MyWAComponent allInstances ).

I see the WASession object but I don't find how to know if the session
has expired because when I get all the instances of WASession which
linked to my MyWAComponent, none of them are expired even if my browser
is closed.

is there anybody who can help me ?

Thanks

Sylvain

_______________________________________________
Seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

RE: seaside et WASession

Bany, Michel
> I have developped a Seaside application and I just want to
> know how can I get the session which are currently active.

Hi Sylvain,

Not sure if I understand what you want exactly. You may want to try
this.

        WASession allInstances select: [ :each | each isActive ].

If you have subclassed WASession, you may want this.

        WASession allGeneralInstances select: [ :each | each isActive ]

or maybe this

        MySessionClass allInstances select: [ :each | each isActive ]

The above will answer with a collection of session objects that are
active (=usable), i.e. sessions that can still be used from a browser.


> In fact when I opened my browser I see a new instance in (
> MyWAComponent allInstances ).
> But when I close my browser, this instance is not remove from
> ( MyWAComponent allInstances ).


When you close your browser, there is no impact at all on what objects
you have in your server image. As a matter of fact the browser does not
send anything to any server when it is closed. The same applies if you
navigate away to a new url in your browser.


> I see the WASession object but I don't find how to know if
> the session has expired because when I get all the instances
> of WASession which linked to my MyWAComponent, none of them
> are expired even if my browser is closed.

When you close your browser (or more generally when you stop using a
session, going for a cup of coffee or navigating away to another web
site),
the session is still around in the image and is still usable. For
instance,
if you re-open the browser, it is possible to return to your most recent
sessions using the browser history. However if you wait too long before
returning to your session, it may have become unusable. This is the
session
time out, it defaults to 10 minutes but can be set to any value.

A Seaside session can be forced-expired by sending #expire to the
session object.
This happens for instance when you select "New Session" in the toolbar.

You may see situations where

        WASession allGeneralInstances select: [ :each | each isActive ]

is empty, and

        WASession allGeneralInstances reject: [ :each | each isActive ]

is not empty. This means that all sessions have become unusable.  
However they are still around in the image and this is designed that
way.

When Seaside sessions are created they are kept in a registry
(WARegistry)
to ensure they are not garbage collected while being used.

>From time to time(*), Seaside cleans up the contents of the registry and
unregisters those sessions that are found unusable.
See method WARegistry>unregisterExpiredHandlers. The actual garbage
collection of a Seaside session occurs some time (not immediately) after
it
has been unregistered, that is some more time after it has become
unusable.
An unusable session may sit for some time in the registry before it is
unregistered.

(*) The clean-up of the session registry occurs every 10th (on average)
new session creation. See method WARegistry>shouldCollectHandlers

See also
http://lists.squeakfoundation.org/pipermail/seaside/2004-October/003704.
html

HTH
Michel.
_______________________________________________
Seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: seaside et WASession

Sylvain pralon
Great answer :!!!! thanks a lot !!!


2007/1/19, Bany, Michel <[hidden email]>:
> I have developped a Seaside application and I just want to
> know how can I get the session which are currently active.

Hi Sylvain,

Not sure if I understand what you want exactly. You may want to try
this.

        WASession allInstances select: [ :each | each isActive ].

If you have subclassed WASession, you may want this.

        WASession allGeneralInstances select: [ :each | each isActive ]

or maybe this

        MySessionClass allInstances select: [ :each | each isActive ]

The above will answer with a collection of session objects that are
active (=usable), i.e. sessions that can still be used from a browser.


> In fact when I opened my browser I see a new instance in (
> MyWAComponent allInstances ).
> But when I close my browser, this instance is not remove from
> ( MyWAComponent allInstances ).


When you close your browser, there is no impact at all on what objects
you have in your server image. As a matter of fact the browser does not
send anything to any server when it is closed. The same applies if you
navigate away to a new url in your browser.


> I see the WASession object but I don't find how to know if
> the session has expired because when I get all the instances
> of WASession which linked to my MyWAComponent, none of them
> are expired even if my browser is closed.

When you close your browser (or more generally when you stop using a
session, going for a cup of coffee or navigating away to another web
site),
the session is still around in the image and is still usable. For
instance,
if you re-open the browser, it is possible to return to your most recent
sessions using the browser history. However if you wait too long before
returning to your session, it may have become unusable. This is the
session
time out, it defaults to 10 minutes but can be set to any value.

A Seaside session can be forced-expired by sending #expire to the
session object.
This happens for instance when you select "New Session" in the toolbar.

You may see situations where

        WASession allGeneralInstances select: [ :each | each isActive ]

is empty, and

        WASession allGeneralInstances reject: [ :each | each isActive ]

is not empty. This means that all sessions have become unusable.
However they are still around in the image and this is designed that
way.

When Seaside sessions are created they are kept in a registry
(WARegistry)
to ensure they are not garbage collected while being used.

>From time to time(*), Seaside cleans up the contents of the registry and
unregisters those sessions that are found unusable.
See method WARegistry>unregisterExpiredHandlers. The actual garbage
collection of a Seaside session occurs some time (not immediately) after
it
has been unregistered, that is some more time after it has become
unusable.
An unusable session may sit for some time in the registry before it is
unregistered.

(*) The clean-up of the session registry occurs every 10th (on average)
new session creation. See method WARegistry>shouldCollectHandlers

See also
http://lists.squeakfoundation.org/pipermail/seaside/2004-October/003704.
html

HTH
Michel.
_______________________________________________
Seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside



--
*********************************************
Sylvain Pralon
Etudiant Genie Logiciel et Services
Ecole Supérieure d'Ingénieurs d'Annecy

http://sylvain.pralon.free.fr
*********************************************
_______________________________________________
Seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside