我知道已经有很多问题了,但我似乎仍然没有找到明确的答案。我想要做的是让用户在登录两周后或直到他们注销之前被记住。以下是我认为应该发生的事情,我想知道是否有更多经验的人可以告诉我我是对还是错。
用户首次登录。对服务器的 RPC 调用返回一个“UserInfo”对象,其中包含一个新的 sessionID。又名在服务器上发生这种情况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
我已与用户关联?我还要检查它是否已过期?
我知道这是一个冗长的问题,也许措辞不太好......我正在努力解决这个问题,所以非常欢迎任何和所有的帮助!
干杯,史蒂夫