5

我知道这已经有很多问题了,但我似乎仍然没有找到明确的答案。我想要做的是让用户在登录 2 周后或直到他们注销后被记住。以下是我认为应该发生的事情,我想知道是否有更多经验的人可以告诉我我是对还是错。

用户首次登录。对服务器的 RPC 调用会返回一个“UserInfo”对象,其中包含一个新的 sessionID。Aka 在服务器上发生并user返回:

user.setSessionId(getThreadLocalRequest().getSession().getId());

现在user返回之后,我们必须创建 Cookie 来存储客户端数据。我是否正确地说我们需要一个 Cookie 来识别当前用户和另一个用于 sessionID:

final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login - 2 weeks
Date expires = new Date(System.currentTimeMillis() + DURATION);

String sessionID = user.getSessionId();
String username = user.getUsername();
Cookies.setCookie("sessionID", sessionID, expires, null, "/", false);
Cookies.setCookie("username", username, expires, null, "/", false);

现在,当用户稍后返回应用程序时,我们会检查 cookie 并且(如果它们存在并且由于某些原因(例如从用户显式注销)没有被删除)使用它们的值通过 RPC 检查会话有效性以服务器:

String sessionID = Cookies.getCookie("sessionID");
String username = Cookies.getCookie("username");

    if ( sessionID != null && username != null){
        AsyncCallback<UserInfo> callBack = new AsyncCallback<UserInfo>(){

            @Override
            public void onFailure(Throwable caught) {

                Window.alert("Error connecting to server.");


            }

            @Override
            public void onSuccess(Boolean sessionValid) {

                if (sessionValid)
                    loadInitialInterfaceForUser("username");
                else
                    loadLoginInterface();
            }

        };

    loginSvc.checkSessionValidity(sessionID,username, callBack);
    }

    else 
        loadLoginInterface();

现在,假设我到目前为止所做的事情是正确的(这有点远:P)我真正的问题是我应该在服务器端检查checkSessionValidity(sessionID,username)什么?

这仅仅是获取我存储在服务器端的用户并 sessionIDsessionID我与用户关联的用户进行比较的情况吗?我还要检查它没有过期吗?

我知道这是一个冗长的问题,也许措辞不是很好......我正在努力解决这个问题,所以非常欢迎任何和所有的帮助!

干杯,史蒂夫

4

2 回答 2

5

是的,这是一个关键的事情。

这是讨论的一些有趣的观点(在数据库中存储会话 ID 和用户名)

看看这个(当然你可以签入impl class而不是签入servlet
如何检查 sessionId 在 servlet (java) 中是否有效

这是GWT中会话管理的一个很好的例子

http://varuntayur.wordpress.com/2012/01/25/session-management-in-gwt

另请阅读 有关 GWT、Cookie 和网页指导的问题

于 2013-02-23T21:27:03.930 回答
0

看看下面的链接。

不能对多个 GWT 应用程序使用相同的 cookie

这可能会解决您的问题。

于 2013-02-25T05:06:45.393 回答