Les Sessions et les Cookies de connexion de voiture dans GWT
je sais il y a beaucoup de questions sur ce déjà mais je ne l'ai toujours pas l'air de trouver une réponse définitive. Ce que je cherche à faire est de demander aux utilisateurs de se rappeler après leur connexion pour dire 2 semaines ou jusqu'à ce qu'ils se déconnecter. Ci-dessous est ce que je pense devrait être passe et je me demandais si quelqu'un avec un peu plus d'expérience pourrait me dire si je suis bon ou mauvais.
Utilisateur se connecte pour la première fois. Un appel RPC sur le serveur renvoie un "UserInfo" objet qui comprend un nouvel id de session. Alias sur le serveur ce qui se passe et user
est retourné:
user.setSessionId(getThreadLocalRequest().getSession().getId());
Maintenant, après user
est retourné, nous devons créer des Cookies pour stocker le côté client de données. Ai-je raison de dire que nous avons besoin d'un Témoin pour identifier l'utilisateur en cours et un autre pour le 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);
Maintenant, lorsque l'utilisateur revient à l'application à une date ultérieure, nous vérifions les cookies et (pour autant qu'elle existe et n'ont pas été supprimées pour certaines raisons, comme l'explicite la déconnexion de l'utilisateur) utilisent leurs valeurs pour vérifier la validité de session via RPC sur le 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 ce que j'ai fait jusqu'à présent est correcte, ce qui est un peu long shot :P), ma vraie question est exactement ce que dois-je vérifier sur le côté serveur checkSessionValidity(sessionID,username)
?
Agit-il simplement d'un cas de l'extraction à l'utilisateur que j'ai stockés server-side et comparer sessionID
avec le sessionID
j'ai associé à l'utilisateur? Dois-je aussi vérifier qu'il n'a pas expiré?
Je sais que c'est un longwinded et peut-être pas très bien formulée question... j'ai du mal à obtenir ma tête autour de lui, donc toute aide est la bienvenue!
Acclamations, Steve
OriginalL'auteur SteveCallender | 2013-02-23
Vous devez vous connecter pour publier un commentaire.
Oui,c'est un truc important à faire.
Voici quelques point intéressant discuté sur ce (Stocker l'id de session et le nom d'utilisateur en DB)
Avoir un regard sur ce (bien sûr vous pouvez les consulter dans
impl class
au lieu deservlet
)comment vérifier si un id de session est valide dans une servlet (java).
Et c'est un excellent exemple de la Gestion de Session dans GWT
http://varuntayur.wordpress.com/2012/01/25/session-management-in-gwt
Lire ce aussi
question sur GWT, des Cookies et de la page web de diriger
Voir vous mélangez les deux exemples, vous devez maintenir dans la session ou à stocker l'id de session dans la base de données. N'a pas besoin de faire les deux.
Ahh d'accord je vois. Ainsi fourni, je vérifie que le sessionID stockées dans le Cookie contre le sessionID stockées dans la base de données je n'ai pas de maintenir les variables de session?
Oui..vous pouvez maintenir les variables de session trop..mais n'a pas besoin de les stocker dans la base de données .parce que vous validez que l'id de session ..pas toutes les variables de session ,quand il se connecte à nouveau.
OriginalL'auteur Suresh Atta
Prendre un coup d'oeil sur le lien suivant.
Ne peut pas utiliser le même cookie pour de multiples applications GWT
Cela pourrait résoudre votre problème.
OriginalL'auteur Abhijith Nagaraja