Je sais qu'il y a déjà beaucoup de questions à ce sujet mais je n'ai toujours pas trouvé de réponse définitive. Ce que je cherche à faire est de se souvenir des utilisateurs après leur connexion pour dire 2 semaines ou jusqu'à ce qu'ils se déconnectent. Voici ce que je pense qu'il devrait se passer et je me demandais si quelqu'un avec un peu plus d'expérience pourrait me dire si j'ai raison ou tort.Sessions et cookies à autologin dans GWT
L'utilisateur se connecte pour la première fois. Un appel RPC au serveur renvoie un objet 'UserInfo' qui inclut avec lui un nouvel identificateur de session. Aka sur le serveur et cela se produit user
est retourné:
user.setSessionId(getThreadLocalRequest().getSession().getId());
Maintenant, après user
est retourné, nous devons créer des cookies pour stocker les données côté client. Ai-je raison de dire nous avons besoin d'un cookie pour identifier l'utilisateur en cours et un autre pour le idSession:
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);
Maintenant, lorsque l'utilisateur revient à l'application à une date ultérieure, nous vérifions les biscuits et (à condition qu'ils existent et ont pas été supprimés pour une raison quelconque, comme un explicite déconnecterai de l'utilisateur) utilisent leurs valeurs pour vérifier la validité de la session via RPC au serveur:
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();
maintenant, en supposant que je l'ai fait jusqu'à présent est correct (qui est un peu long: P) ma vraie question est de savoir exactement ce que je devrais vérifier sur le côté serveur checkSessionValidity(sessionID,username)
?
Est-ce simplement un cas d'aller chercher l'utilisateur que j'ai stocké Serverside et la comparaison avec le sessionID
sessionID
j'ai associé à l'utilisateur? Est-ce que je vérifie également qu'il n'a pas expiré?
Je sais que c'est verbeux et peut-être pas question très bien rédigé ... Je me bats pour obtenir ma tête ronde si toute aide est la bienvenue!
Cheers, Steve
Salut, merci beaucoup pour la réponse, l'exemple a rendu les choses un peu plus claires! Une chose que je me demandais est, dans l'exemple, lorsque l'utilisateur se déconnecte, il supprime l'utilisateur de la session, mais n'invalide pas le sessionID qui est stocké dans la base de données avec l'utilisateur? Cela ne devrait-il pas être fait aussi? – SteveCallender
Voyez que vous mélangez les deux exemples, soit vous devez maintenir dans la session ou devez stocker l'ID de session dans la base de données. Ne pas faire les deux. –
Ahh d'accord, je vois. Donc, à condition que je vérifie que le sessionID stocké dans le cookie contre le sessionID stocké dans la base de données, je ne dois pas maintenir les variables de session? – SteveCallender