so che ci sono già un sacco di domande su questo, ma non ho ancora trovato una risposta definitiva. Quello che sto cercando di fare è ricordare agli utenti dopo aver effettuato l'accesso per dire 2 settimane o finché non si disconnettono. Di seguito è quello che penso dovrebbe accadere e mi chiedevo se qualcuno con un po 'più di esperienza potrebbe dirmi se ho ragione o torto.Sessioni e cookie per l'autologin in GWT
L'utente accede per la prima volta. Una chiamata RPC al server restituisce un oggetto "UserInfo" che include con esso un nuovo sessionID. Aka sul server questo accade e user
viene restituito:
user.setSessionId(getThreadLocalRequest().getSession().getId());
Ora, dopo user
viene restituito dobbiamo creare i cookie per memorizzare i dati lato client. Ho ragione nel dire che abbiamo bisogno di un cookie per identificare l'utente corrente e un altro per il 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);
Ora, quando l'utente torna al app in un secondo momento, controlliamo i cookie e (a condizione che esiste e non sono stati eliminati per qualche motivo, ad esempio un esplicito logout da parte dell'utente) utilizzare i loro valori per controllare sessione di validità tramite RPC al 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();
Ora, supponendo che quello che ho fatto finora è corretta (che è un po 'lungo: P) la mia vera domanda è cosa dovrei controllare sul lato server checkSessionValidity(sessionID,username)
?
È semplicemente un caso di recuperare l'utente che ho memorizzato serveride e confrontando sessionID
con lo sessionID
che ho associato con l'utente? Verifico anche che non sia scaduto?
So che questa è una domanda lunga e forse non molto ben formulata ... Sto lottando per farmi girare la testa così ogni aiuto è molto gradito!
Cheers, Steve
Ehi amico, grazie mille per la risposta, l'esempio ha reso le cose un po 'più chiare! Una cosa che mi chiedevo è, nell'esempio, quando l'utente si disconnette, rimuove l'utente dalla sessione ma non annulla l'ID di sessione che è memorizzato nel DB con l'utente? Non dovrebbe essere fatto anche questo? – SteveCallender
Vedi che stai mixando i due esempi, o che devi mantenere nella sessione o devi memorizzare l'ID di sessione nel db. Non c'è bisogno di fare entrambe le cose. –
Ahh okay capisco. Quindi, a condizione di controllare che il sessionID memorizzato nel cookie rispetto al sessionID memorizzato nel DB non devo mantenere le variabili di sessione? – SteveCallender