Come posso mantenere un utente connesso al mio sito per mesi?

Sto usando OpenID. Come faccio a fare in modo che l’utente rimanga connesso per un lungo periodo anche dopo aver chiuso la finestra del browser?

Come posso archiviare e ottenere l’accesso all’object User ?

Fondamentalmente, immagino di non capire davvero come funzionano le sessioni in Java.

Quindi in realtà vuoi l’opzione “Ricordami su questo computer”? Questo in realtà non è correlato alla parte OpenID. Ecco un modo indipendente dal linguaggio su come puoi farlo:

  • Per prima cosa crea una tabella DB con almeno le colonne cookie_id e user_id . Se necessario, aggiungi anche cookie_ttl e ip_lock . I nomi delle colonne parlano da soli, suppongo.

  • Al primo accesso (se necessario solo con l’opzione “Ricordami” selezionata), genera una chiave lunga, unica, difficile da indovinare (che non è in alcun modo correlata all’utente) che rappresenta il cookie_id e la memorizza in il DB insieme a user_id . Memorizza cookie_id come valore del cookie di un cookie con il nome del cookie conosciuto, ad esempio remember . Dai al biscotto una lunga vita, ad esempio un anno.

  • Ad ogni richiesta, controlla se l’utente è loggato. In caso contrario, controlla il valore del cookie cookie_id associato al nome del cookie remember . Se è presente ed è valido in base al DB, accedere automaticamente l’utente associato a user_id e posticipare nuovamente l’età del cookie e, se presente, anche il cookie_ttl nel DB.

Nei termini Java / JSP / Servlet, utilizzare HttpServletResponse#addCookie() per aggiungere un cookie e HttpServletRequest#getCookies() per ottenere i cookie. Puoi eseguire tutti i controlli per la prima volta in un Filter che ascolta le risorse desiderate, ad esempio /* o forse un po ‘più limitato.

Per quanto riguarda le sessioni, non ne hai bisogno qui. Ha una vita più breve del necessario. Utilizzalo solo per mettere l’utente che ha effettuato l’accesso o l’utente “trovato” quando ha un cookie di remember valido. In questo modo il Filter può semplicemente verificare la sua presenza nella sessione e quindi non è necessario controllare i cookie ogni volta.

Dopo tutto è abbastanza semplice. In bocca al lupo.

Guarda anche:

  • Come implementare “Resta connesso” quando l’utente accede all’applicazione web
  • Come funzionano le servlet? Istanziazione, sessioni, variabili condivise e multithreading

Bene, il motivo originale per cui ho scelto OpenID era così che qualcun altro potesse gestire l’implementazione e la sicurezza dell’autenticazione per me.

Dopo aver esaminato di più OpenID, sembra che ci sia qualcosa chiamata “Richiesta immediata” ( http://openid.net/specs/openid-authentication-2_0.html#anchor28 ).

Quando si richiede l’autenticazione, la parte richiedente può richiedere che l’OP non interagisca con l’utente finale. In questo caso, l’OP DEVE rispondere immediatamente con un’affermazione secondo cui l’autenticazione ha esito positivo o una risposta che indica che la richiesta non può essere completata senza ulteriore interazione dell’utente.

Per questo motivo, penso che potrei semplicemente memorizzare l’URL openID dell’utente nel cookie e utilizzare una richiesta immediata per vedere se l’utente è autenticato o meno. In questo modo non devo fare nulla con il mio database, né implementare alcuna logica per impedire il dirottamento di sessione del cookie longevo.

Questo metodo per farlo sembra essere il modo in cui OpenID suggerisce di farlo con il documento Relying Party Best Practices .