You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Richard Hill <ri...@su3analytics.com> on 2011/01/13 14:50:48 UTC

Clearing session data T 5.1.0.5

Hi All,

I have an app that's stateful, a fair number of @Persist'd fields on
various pages + an SSO with logged in user info.

What I want to do is clear all of this session data when a user logs in.
The scenario here is a user logging in when he's already logged in (or
logging in as a different user when already logged in) - so I want to
start with a blank slate.

I've tried invalidating the Session, but subsequently setting an SSO
with ApplicationStateManger throws an IllegalStateException:


@Inject
private ApplicationStateManager stateManager;
@Inject
private Request request;

private void login(Client client) {
		
  Session session = request.getSession(false);
  session.invalidate();
		
  stateManager.set(ClientState.class, new ClientState(client));

}

which is not surprising I guess. So is it possible to create/validate a
new Session? Or is there a way to clear the Session without
destroying/invalidating?

I've taken a look at this post here:
http://tapestry-user.markmail.org/search/?q=session+peter#query:session%
20peter+page:1+mid:25lfcwf67itjg2ie+state:results

which suggests looping over every ASM object. Is the best way to go?

Thanks Richard.





 





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Clearing session data T 5.1.0.5

Posted by Richard Hill <ri...@su3analytics.com>.
Yes agreed - I have just one ClientState object that I keep in the
session, and this wraps global state values. But I do have lots of
page-scoped @Persist'd fields - timestamps, various context/selection
id's etc which need to get cleared too.

I haven't extensively tested, but this seems to do the trick:

List<String> names = session.getAttributeNames();
  for (String name : names) {
     session.setAttribute(name, null);
}

getAttributeNames() returns all @Persist'd and SSO entities.


Cheers


On Thu, 2011-01-13 at 15:24 +0100, Joost Schouten (ml) wrote:
> Good point. I think looping over the objects sounds like a good option.
> 
> I personally try to keep all persisted state for a user in one object So 
> that I have tight conrol over what is in the session and what is not. 
> Then you only have to alter/remove one object from the session and you 
> know which one it is ;-). More and more I favour activate and passivate 
> over @Persist btw. Especially when you start combining stay logged 
> cookies and ajax. But that's a whole diferent discussion.
> 
> Good luck,
> Joost
> 
> On 13/01/11 3:16 PM, Richard Hill wrote:
> > Hi Joost,
> >
> > I'd prefer not to do it in setupRender as that will clear the session
> > even if the logged-in user has accidently hit the back button - when he
> > goes forward to the app the state will be cleared. So I'll loop over the
> > objects and do it manually.
> >
> > Cheers
> >
> >
> >
> > On Thu, 2011-01-13 at 15:09 +0100, Joost Schouten (ml) wrote:
> >> Go with the suggestion you already posted or try to invalidate the
> >> session on the setupRender of the login page in stead.
> >>
> >> Cheers,
> >> Joost
> >>
> >> On 13/01/11 2:50 PM, Richard Hill wrote:
> >>> Hi All,
> >>>
> >>> I have an app that's stateful, a fair number of @Persist'd fields on
> >>> various pages + an SSO with logged in user info.
> >>>
> >>> What I want to do is clear all of this session data when a user logs in.
> >>> The scenario here is a user logging in when he's already logged in (or
> >>> logging in as a different user when already logged in) - so I want to
> >>> start with a blank slate.
> >>>
> >>> I've tried invalidating the Session, but subsequently setting an SSO
> >>> with ApplicationStateManger throws an IllegalStateException:
> >>>
> >>>
> >>> @Inject
> >>> private ApplicationStateManager stateManager;
> >>> @Inject
> >>> private Request request;
> >>>
> >>> private void login(Client client) {
> >>> 		
> >>>     Session session = request.getSession(false);
> >>>     session.invalidate();
> >>> 		
> >>>     stateManager.set(ClientState.class, new ClientState(client));
> >>>
> >>> }
> >>>
> >>> which is not surprising I guess. So is it possible to create/validate a
> >>> new Session? Or is there a way to clear the Session without
> >>> destroying/invalidating?
> >>>
> >>> I've taken a look at this post here:
> >>> http://tapestry-user.markmail.org/search/?q=session+peter#query:session%
> >>> 20peter+page:1+mid:25lfcwf67itjg2ie+state:results
> >>>
> >>> which suggests looping over every ASM object. Is the best way to go?
> >>>
> >>> Thanks Richard.
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >>> For additional commands, e-mail: users-help@tapestry.apache.org
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Clearing session data T 5.1.0.5

Posted by "Joost Schouten (ml)" <jo...@jsportal.com>.
  Good point. I think looping over the objects sounds like a good option.

I personally try to keep all persisted state for a user in one object So 
that I have tight conrol over what is in the session and what is not. 
Then you only have to alter/remove one object from the session and you 
know which one it is ;-). More and more I favour activate and passivate 
over @Persist btw. Especially when you start combining stay logged 
cookies and ajax. But that's a whole diferent discussion.

Good luck,
Joost

On 13/01/11 3:16 PM, Richard Hill wrote:
> Hi Joost,
>
> I'd prefer not to do it in setupRender as that will clear the session
> even if the logged-in user has accidently hit the back button - when he
> goes forward to the app the state will be cleared. So I'll loop over the
> objects and do it manually.
>
> Cheers
>
>
>
> On Thu, 2011-01-13 at 15:09 +0100, Joost Schouten (ml) wrote:
>> Go with the suggestion you already posted or try to invalidate the
>> session on the setupRender of the login page in stead.
>>
>> Cheers,
>> Joost
>>
>> On 13/01/11 2:50 PM, Richard Hill wrote:
>>> Hi All,
>>>
>>> I have an app that's stateful, a fair number of @Persist'd fields on
>>> various pages + an SSO with logged in user info.
>>>
>>> What I want to do is clear all of this session data when a user logs in.
>>> The scenario here is a user logging in when he's already logged in (or
>>> logging in as a different user when already logged in) - so I want to
>>> start with a blank slate.
>>>
>>> I've tried invalidating the Session, but subsequently setting an SSO
>>> with ApplicationStateManger throws an IllegalStateException:
>>>
>>>
>>> @Inject
>>> private ApplicationStateManager stateManager;
>>> @Inject
>>> private Request request;
>>>
>>> private void login(Client client) {
>>> 		
>>>     Session session = request.getSession(false);
>>>     session.invalidate();
>>> 		
>>>     stateManager.set(ClientState.class, new ClientState(client));
>>>
>>> }
>>>
>>> which is not surprising I guess. So is it possible to create/validate a
>>> new Session? Or is there a way to clear the Session without
>>> destroying/invalidating?
>>>
>>> I've taken a look at this post here:
>>> http://tapestry-user.markmail.org/search/?q=session+peter#query:session%
>>> 20peter+page:1+mid:25lfcwf67itjg2ie+state:results
>>>
>>> which suggests looping over every ASM object. Is the best way to go?
>>>
>>> Thanks Richard.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Clearing session data T 5.1.0.5

Posted by Richard Hill <ri...@su3analytics.com>.
Hi Joost,

I'd prefer not to do it in setupRender as that will clear the session
even if the logged-in user has accidently hit the back button - when he
goes forward to the app the state will be cleared. So I'll loop over the
objects and do it manually.

Cheers



On Thu, 2011-01-13 at 15:09 +0100, Joost Schouten (ml) wrote:
> Go with the suggestion you already posted or try to invalidate the 
> session on the setupRender of the login page in stead.
> 
> Cheers,
> Joost
> 
> On 13/01/11 2:50 PM, Richard Hill wrote:
> > Hi All,
> >
> > I have an app that's stateful, a fair number of @Persist'd fields on
> > various pages + an SSO with logged in user info.
> >
> > What I want to do is clear all of this session data when a user logs in.
> > The scenario here is a user logging in when he's already logged in (or
> > logging in as a different user when already logged in) - so I want to
> > start with a blank slate.
> >
> > I've tried invalidating the Session, but subsequently setting an SSO
> > with ApplicationStateManger throws an IllegalStateException:
> >
> >
> > @Inject
> > private ApplicationStateManager stateManager;
> > @Inject
> > private Request request;
> >
> > private void login(Client client) {
> > 		
> >    Session session = request.getSession(false);
> >    session.invalidate();
> > 		
> >    stateManager.set(ClientState.class, new ClientState(client));
> >
> > }
> >
> > which is not surprising I guess. So is it possible to create/validate a
> > new Session? Or is there a way to clear the Session without
> > destroying/invalidating?
> >
> > I've taken a look at this post here:
> > http://tapestry-user.markmail.org/search/?q=session+peter#query:session%
> > 20peter+page:1+mid:25lfcwf67itjg2ie+state:results
> >
> > which suggests looping over every ASM object. Is the best way to go?
> >
> > Thanks Richard.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Clearing session data T 5.1.0.5

Posted by "Joost Schouten (ml)" <jo...@jsportal.com>.
  Go with the suggestion you already posted or try to invalidate the 
session on the setupRender of the login page in stead.

Cheers,
Joost

On 13/01/11 2:50 PM, Richard Hill wrote:
> Hi All,
>
> I have an app that's stateful, a fair number of @Persist'd fields on
> various pages + an SSO with logged in user info.
>
> What I want to do is clear all of this session data when a user logs in.
> The scenario here is a user logging in when he's already logged in (or
> logging in as a different user when already logged in) - so I want to
> start with a blank slate.
>
> I've tried invalidating the Session, but subsequently setting an SSO
> with ApplicationStateManger throws an IllegalStateException:
>
>
> @Inject
> private ApplicationStateManager stateManager;
> @Inject
> private Request request;
>
> private void login(Client client) {
> 		
>    Session session = request.getSession(false);
>    session.invalidate();
> 		
>    stateManager.set(ClientState.class, new ClientState(client));
>
> }
>
> which is not surprising I guess. So is it possible to create/validate a
> new Session? Or is there a way to clear the Session without
> destroying/invalidating?
>
> I've taken a look at this post here:
> http://tapestry-user.markmail.org/search/?q=session+peter#query:session%
> 20peter+page:1+mid:25lfcwf67itjg2ie+state:results
>
> which suggests looping over every ASM object. Is the best way to go?
>
> Thanks Richard.
>
>
>
>
>
>
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org