Ok, I will try that. Thanks for your answer.

In the meantime, I had experimented a little and I found that I could
use a cookie to store the current user/encoded password combination
and, if the failure case occurs, I "re-authenticate" the user from the
information in the cookie and bind the user to the new session. This
works -- I don't really understand, why the problem occured in the
first place, but at least I do have a workaround now. For those
interested, here is the relevant snippet:

Call this, whenever a user authenticates (or in a more general case:
Whenever you assign data to a session):
        private final void updateCookies(String login, String hash) {
                Cookie cLogin = new Cookie("userName", login);
                Cookie cPwd = new Cookie("userPassword", hash);
                int maxAge;
                String path = getThreadLocalRequest().getContextPath();
                maxAge = 60 * 60 * 24 * 30; // 1 month

                cLogin.setMaxAge(maxAge);
                cPwd.setMaxAge(maxAge);

                cLogin.setPath(path);
                cPwd.setPath(path);

                getThreadLocalResponse().addCookie(cLogin);
                getThreadLocalResponse().addCookie(cPwd);
        }

To read the cookie-data:
        protected AuthUser getAuthUserFromCookies () {
                Cookie[] cookies = getThreadLocalRequest().getCookies();
                String loginName = null;
                String password = null;
                if (cookies != null) {
                        for (int i = 0; i < cookies.length; i++) {
                                Cookie cookie = cookies[i];
                                String name = cookie.getName();
                                String value = cookie.getValue();
                                if (name.equalsIgnoreCase("userName")) {
                                        loginName = value;
                                } else if 
(name.equalsIgnoreCase("userPassword")) {
                                        password = value;
                                }
                        }
                }

                System.err.println("Examining cookie: " + loginName + ", " +
password);

                // Snip: The following omitted code authenticates the user 
using a
password hash
                return successfullyAuthenticatedUser;
        }

So now, it's down to the failure case:

        public final synchronized UserSession getUserSession() throws
SessionExpiredException {
                HttpSession session = getSession();
                synchronized (session) {
                        UserBinding userBinding = 
(UserBinding)session.getAttribute
(SESSION_USER);
                        if(userBinding == null) {
                                System.err.println("Session cookie expired; 
re-authenticating
user...");
                                AuthUser user = getAuthUserFromCookies();
                                if (user != null) {
                                        UserSession userSession = new 
UserSession(user, session.getId());
                                        bindUserToSession(userSession, session);
                                        // Be sure to update the
cookie here, again; otherwise you'll run into problems
                                        // the next time the session
is different.
                                        updateCookies(user.getLoginName(), 
user.getPassword());
                                }
                                userBinding = 
(UserBinding)session.getAttribute(SESSION_USER);
                                if (userBinding == null) {
                                        throw new 
SessionExpiredException("Session expired!");
                                }
                        }
                        return userBinding.getUserSession();
                }
        }


On 9 Sep., 01:54, Sri <[email protected]> wrote:
> GWT doesn't do anything with the session, so it is strange you are
> facing such a problem.
>
> Perhaps you could make a simple servlet/jsp (independent of gwt) which
> prints the same information as above (ie. sessionid and user object),
> and access the URL via a browser. If you are seeing the same behaviour
> (session id changing), then you would have eliminated GWT from being
> the culprit.
>
> On Sep 8, 4:11 am, "[email protected]"
>
> <[email protected]> wrote:
> > Hi,
>
> > for a GWT application, I need a user management servlet, thus I am
> > setting an attribute for a session in which the current user is stored
> > (like this:
>
> > HttpSession session = getThreadLocalRequest().getSession(true);
> > session.setAttribute("user", "myUserName");
>
> > Now, I do have a different service, which I use to display some data.
> > When I click on a button on the client side, the data is displayed
> > correctly -- in about 59 of 60 cases. If I click the button often
> > enough, at one point, the following code will _not_ work:
>
> > HttpSession session = getThreadLocalRequest().getSession();
> > String userName = (String) session.getAttribute("user");
>
> > and at this point, userName suddenly is null!
> > As I said, most of the time, the code above works, but sometimes, it
> > doesn't... Why?
>
> > Also: I have printed the session id to the screen: It is correct (i.e.
> > always the same) as long as the above code works, but in the failure
> > case, the session id suddenly is different (although I am positive
> > that I neither started a new session nor asked GWT to do so...).
>
> > Any ideas? Do you need more information? What am I doing wrong?
>
> > Thanks for your help!
> > Philipp
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to