我知道这已经有很多问题了,但我似乎仍然没有找到明确的答案。我想要做的是让用户在登录 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)
什么?
这仅仅是获取我存储在服务器端的用户并 sessionID
与sessionID
我与用户关联的用户进行比较的情况吗?我还要检查它没有过期吗?
我知道这是一个冗长的问题,也许措辞不是很好......我正在努力解决这个问题,所以非常欢迎任何和所有的帮助!
干杯,史蒂夫