Sessions und Cookies für autologin in GWT
ich weiß es gibt viele Fragen, die dieser schon, aber ich wusste immer noch nicht scheinen zu finden, eine definitive Antwort. Was ich Suche zu tun haben, ist der Benutzer daran erinnert werden, nachdem Sie das login für sagen wir 2 Wochen oder bis Sie sich ausloggen. Unten ist das, was ich denke, geschehen sollte, und ich Frage mich, wenn jemand mit ein bisschen mehr Erfahrung mir sagen könnte, ob ich richtig oder falsch bin.
Benutzer meldet sich zum ersten mal. Ein RPC-Aufruf an den server zurück, eine 'UserInfo' - Objekt, das enthält eine neue sessionID. Aka auf dem server passiert und user
zurückgegeben:
user.setSessionId(getThreadLocalRequest().getSession().getId());
Nun nach user
zurückgegeben wird, müssen wir Cookies zum speichern der client-Seite Daten. Bin ich richtig zu sagen, wir brauchen ein Cookie zur Identifizierung des aktuellen Benutzers und eine für die Sitzungs-id:
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);
Nun, wenn der Benutzer kommt zurück, um die app zu einem späteren Zeitpunkt prüfen wir die cookies, und (vorausgesetzt, Sie existiert und nicht gelöscht wurden aus irgendeinem Grund wie eine explizite Abmelden aus dem Benutzer) verwenden, deren Werte zu überprüfen, die Gültigkeit der Sitzung per RPC an den server:
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();
Nun, vorausgesetzt, was ich bisher getan habe, ist richtig (das ist ein bisschen weit hergeholt :P) meine eigentliche Frage ist, was genau sollte ich überprüfen auf der server-Seite checkSessionValidity(sessionID,username)
?
Ist es einfach ein Fall von abrufen der Benutzer, die ich gespeichert haben serverside und vergleichen sessionID
mit der sessionID
ich habe im Zusammenhang mit Benutzer? Kann ich auch überprüfen, es noch nicht abgelaufen ist?
Ich weiß, das ist langatmig und vielleicht nicht sehr gut formulierte Frage... ich bin kämpfen, um meinen Kopf gerundet, so dass jegliche Hilfe ist sehr willkommen!
Cheers, Steve
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja,das ist eine wichtige Sache zu tun.
Hier einige interessante Punkt diskutiert, dass (Speicherung der session-id und der Benutzername in der DB)
Haben Sie einen Blick auf diese (natürlich können Sie diese prüfen in
impl class
stattservlet
)wie um zu überprüfen, ob eine sessionId gültig ist in einem servlet (java).
Und hier ist ein gutes Beispiel, Session-Management in GWT
http://varuntayur.wordpress.com/2012/01/25/session-management-in-gwt
Lesen dies auch
Frage auf GWT, Cookies und Webseite lenken
Werfen Sie einen Blick auf den folgenden link.
Nicht verwenden dasselbe cookie für mehrere GWT-Anwendungen
Dies könnte Ihr problem lösen.